我目前正在 Delphi XE 2试用版上工作。我想在不使用任何第三方组件/库的情况下在TIMage控件中加载和显示TIFF图像。
我尝试了下面的代码,但它不适合我。
Procedure TForm1.Button1Click(Sender: TObject);
Var
OleGraphic : TOleGraphic;
fs : TFileStream;
Source : TImage;
BMP : TBitmap;
Begin
Try
OleGraphic := TOleGraphic.Create;
fs := TFileStream.Create('c:\testtiff.dat', fmOpenRead Or fmSharedenyNone);
OleGraphic.LoadFromStream(fs);
Source := Timage.Create(Nil);
Source.Picture.Assign(OleGraphic);
BMP := TBitmap.Create;
bmp.Width := Source.Picture.Width;
bmp.Height := source.Picture.Height;
bmp.Canvas.Draw(0, 0, source.Picture.Graphic);
image1.Picture.Bitmap := bmp;
Finally
fs.Free;
OleGraphic.Free;
Source.Free;
bmp.Free;
End;
End;
字符串
还请多多指教。
4条答案
按热度按时间iecba09b1#
字符串
bbuxkriu2#
可以使用
GDI+
:字符串
我还想提一下Synopsys
TSynPicture
(GDI+ wrapper):https://stackoverflow.com/a/6251810/937125**编辑:**GDI+
TGPImage
也支持多个tiff帧/页面:要获取帧数,请使用用途:
型
要设置活动帧,用途:
型
注意
TSynPicture
也支持多帧。dzhpxtsq3#
正如我在评论中所说,如果文件扩展名是标准的tiff扩展名,则打开文件的代码是微不足道的:
字符串
如果没有,请遵循dwrbudr的答案。
下面是一个示例:
型
另请参阅
TWICImage
,适用于XP SP3及更高版本。nvbavucw4#
另外,如果TIF包含多张图片,您可以在TWicImage中加载图片之前,使用
FrameIndex
属性指定要加载的图片使用
FrameCount
,您可以获得TIF文件中可用图像的数量FrameIndex
范围为0到FrameCount
-1