1

このコードを使用して画像を描画し、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解像度のみを変更したいので、画像の寸法(幅と高さ)を変更したくないことに注意してください。

この質問については多くの回答が見つかりましたが、Delphi については何も見つかりませんでした。

4

2 に答える 2

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;

このコミットを参照してください。

于 2012-08-02T15:42:01.850 に答える