Thema: Delphi TMetaFile zuschneiden

Einzelnen Beitrag anzeigen

TiGü

Registriert seit: 6. Apr 2011
Ort: Berlin
3.060 Beiträge
 
Delphi 10.4 Sydney
 
#2

AW: TMetaFile zuschneiden

  Alt 7. Mai 2020, 09:12
Hm, tricky. Hatte ich mir einfacher und weniger aufwendig vorgestellt.
Ich habe es nur über den Umweg über ein TBitmap "geschafft".
Und die neue Datei ist auch 744 KB groß, gegenüber dem Original mit 47,8 KB. Da steht die Befürchtung im Raum, dass nicht wirklich die GDI-Befehle platzsparend in der neuen EMF-Datei stehen, sondern einfach nur das Bitmap (also als eine Ansammlung von Bytes) drin steckt.

Delphi-Quellcode:
procedure TForm1.btn1Click(Sender: TObject);
var
  Metafile: TMetafile;
  Metafile2: TMetafile;
  MetafileCanvas: TMetafileCanvas;
  OldSize, NewSize: TRect;
  Bitmap: TBitmap;
begin
  Metafile := TMetafile.Create;
  try
    Metafile.LoadFromFile('C:\Temp\metafile\metafile.emf');

    OldSize := TRect.Create(0, 0, Metafile.Width, Metafile.Height);
    NewSize := TRect.Create(0, 0, 680, 280);

    Bitmap := TBitmap.Create;
    try
      Bitmap.SetSize(OldSize.Width, OldSize.Height);
      Bitmap.Canvas.StretchDraw(OldSize, Metafile);
      Bitmap.SetSize(NewSize.Width, NewSize.Height);
      Bitmap.SaveToFile('C:\Temp\metafile\metafile2.bmp');

      Metafile2 := TMetafile.Create;
      try
        Metafile2.SetSize(NewSize.Width, NewSize.Height);

        MetafileCanvas := TMetafileCanvas.Create(Metafile2, 0);
        try
          MetafileCanvas.StretchDraw(NewSize, Bitmap);
        finally
          MetafileCanvas.Free;
        end;

        Metafile2.SaveToFile('C:\Temp\metafile\metafile2.emf');
      finally
        Metafile2.Free;
      end;
    finally
      Bitmap.Free;
    end;
  finally
    Metafile.Free;
  end;
end;
  Mit Zitat antworten Zitat