我使用此代码绘制图像并使用Delphi 2006将其保存为TIFF:
var Bmp: TBitmap;
MF: TMetaFile;
MetafileCanvas: TMetafileCanvas;
begin
Gdip := TGDIPlusFull.Create('gdiplus.dll');
MF := TMetaFile.Create;
MF.Width := 1000;
MF.Height := 1100;
MetafileCanvas := TMetafileCanvas.Create(MF, 0);
MetafileCanvas.Brush.Color := clRed;
MetafileCanvas.Brush.Style := bsDiagCross;
MetafileCanvas.Ellipse(50, 50, 300 - 50, 200 - 50);
MetafileCanvas.Free;
Bmp := Gdip.DrawAntiAliased(MF);
Image1.Picture.Assign(Bmp);
SynGDIPlus.SaveAs(Bmp, 'c:\test.tif', gptTIF);
Bmp.Free;
MF.Free;
FreeAndNil(GdiP);
end;
注意我使用来自http://www.synopse.info。
的免费框架代码效果很好。但是我有一个问题。如何设置TIFF分辨率。 我的test.tif图像有96 DPI(屏幕分辨率),但我需要200 DPI。 注意我不能想要改变图像尺寸(宽度和高度),因为有正确的,我只想改变DPI分辨率。
我找到了很多关于这个问题的答案,但没有关于德尔福的答案。
答案 0 :(得分:3)
我添加了以下方法:
procedure TSynPicture.BitmapSetResolution(DPI: single);
begin
if (fImage<>0) and fAssignedFromBitmap and (DPI<>0) then
Gdip.BitmapSetResolution(fImage,DPI,DPI);
end;
将调用相应的GDI + API来设置位图分辨率。
然后应在保存时指定:
procedure SaveAs(Graphic: TPersistent; const FileName: TFileName;
Format: TGDIPPictureType; CompressionQuality: integer=80;
MaxPixelsForBiggestSide: cardinal=0; BitmapSetResolution: single=0); overload;
var Stream: TStream;
begin
Stream := TFileStream.Create(Filename, fmCreate);
try
SaveAs(Graphic,Stream,Format,CompressionQuality,MaxPixelsForBiggestSide,
BitmapSetResolution);
finally
Stream.Free;
end;
end;
所以你可以写下你的代码:
Bmp := Gdip.DrawAntiAliased(MF);
Image1.Picture.Assign(Bmp);
SynGDIPlus.SaveAs(Bmp, 'c:\test.tif', gptTIF, 80, 0, 200); // force 200 DPI
Bmp.Free;
请参阅this commit。
答案 1 :(得分:0)
TWICImage类可以保存TIF文件的DPI信息,但乍看之下对此功能的访问并不明显。只需调用句柄的SetResolution函数。
tif := TWICImage.Create;
...
tif.Handle.SetResolution( DPI_X, DPI_Y);