Vous pouvez utiliser un "TMetaFileCanvas" prenant en charge EMF. Un extrait de code:
procedure TForm1.Button1Click(Sender: TObject);
var
MyMetaFile: TMetaFile;
MyCanvas: TMetafileCanvas;
begin
MyMetaFile:= TMetaFile.Create;
try
MyMetaFile.LoadFromFile('C:\example.emf');
MyCanvas:= TMetafileCanvas.Create(MyMetaFile, 0);
try
MyCanvas.Draw(0, 0, MyMetaFile);
MyCanvas.Pen.Color:= clRed;
MyCanvas.MoveTo(0, 0);
MyCanvas.LineTo(100, 100);
MyCanvas.Free;
Image1.Canvas.Draw(0, 0, MyMetaFile);
finally
MyCanvas.Free;
end;
MyMetaFile.SaveToFile('C:\example.emf');
finally
MyMetaFile.Free;
end;
end;
De cette façon, vous pouvez charger EMF, dessiner sur EMF et l'enregistrer. Mais le présenter comme un graphique vectoriel de Delphi est un autre problème tout à fait. Delphi fonctionne uniquement avec les graphiques bitmap prêts à l'emploi. Mais si je comprends bien, vous voulez seulement lire et dessiner. Pour le convertir en BMP par exemple, vous pouvez faire:
// destroy canvas to transfer the image into the metafile object
FreeAndNil(MyCanvas);
// draw image as normal graphic
BMP.Canvas.Draw(0, 0, MyMetaFile);
EDIT:
Comme Marco aimablement fait remarquer TMetafileCanvas probablement le travail woun't correctement avec EMF +. Je n'ai pas testé cela donc je ne peux pas le confirmer.
Mais il semble y avoir une unité qui fonctionne avec ça.
http://blog.synopse.info/post/2010/04/02/Antialiased-drawing-from-TMetaFile
téléchargement est disponible à partir de:
http://synopse.info/files/SynGdiPlus.zip
Havent vérifié moi-même, mais il semble approprié pour le travail.
C'est bon vieux EMF, êtes-vous sûr qu'il fait aussi EMF + ? Afaik Delphi n'a pas de composants GDIplus dans la distribution d'actions –
Hm, non je ne suis pas sûr :) – Runner
Mis à jour la réponse. – Runner