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;