Arbeiten mit der eDocEngine VCL von Gnostice
Spaß mit Delphi und dynamischer Bilderzeugung
eDocEngine ist eine hervorragende Sammlung von Komponenten, um Textdokumente, Tabellen, Bilddateien und Zwischenablageinhalte zu erstellen. Die Komponenten haben zwar ihre eigene API, können jedoch auch über übliche und damit den meisten Entwicklern bereits bekannte Canvas-Befehle gesteuert werden.
Die eDocEngine kann eingesetzt werden, um alle Arten von dynamischen Bildern zu erzeugen, wie zum Beispiel die Bewegung des DAX als Liniendiagramm. Stattdessen kann man jedoch auch einfach ein bisschen Spaß haben und sich ein Bild aus dem Internet suchen, wie zum Beispiel das folgende Bild, auf dem der Text „This is my protest sign“ bereits entfernt wurde:
Mit der JPEG-Engine der eDocEngine wird das Vorlagenbild auf eine „Seite“ gezeichnet, die in den Abmessungen denen des Bildes entspricht. Dann wird der eigene Text mit einer leichten Drehung (an die Ausrichtung des Schildes angepasst) darüber gerendert.
Dies ist der Quelltext (benötigt keine Komponenten auf dem Formular):
procedure TForm1.Button1Click(Sender: TObject); var gtJPEGEngine1: TgtJPEGEngine; Image1: TJPEGImage; begin // Vorlagenbild laden Image1 := TJPEGImage.Create; Image1.LoadFromFile('protest.jpg'); // Eine JPEG-Engine erzeugen gtJPEGEngine1 := TgtJPEGEngine.Create(Nil); with gtJPEGEngine1 do begin Preferences.ShowSetupDialog := false; Preferences.OpenAfterCreate := true; MeasurementUnit := muPixels; // JPEG-Encoding Einstellungen setzen PixelFormat := pf24bit; ProgressiveEncoding := true; // Webfreundlich Quality := 80; // Ein guter Kompromiss // Größe der Vorlage übernehmen with Page do begin PaperSize := Custom; Width := Image1.Width; Height := Image1.Height; end; // Textrotation an die Ausrichtung der Vorlage anpassen SetTextRotation(5); // Erstes Bild FileName := 'Protest1.jpg'; // Schrift einstellen Font.Name := 'Comic Sans MS'; Font.Size := 40; Font.Color := clRed; BeginDoc; // Vorlagenbild zeichnen DrawImage(gtRect(0,0, 640, 480), TGraphic(Image1)); // Text über die Vorlage zeichnen TextOut(250,100, 'Stop'); TextOut(225,200, 'Cartoon'); TextOut(225,300, 'Violence'); EndDoc; // Bild in Datei speichern // Zweites Bild FileName := 'Protest2.jpg'; SetTextRotation(5); Font.Size := 28; Font.Color := clWebBlueViolet; BeginDoc; DrawImage(gtRect(0,0, 640, 480), TGraphic(Image1)); TextOut(225,120, 'Save the'); TextOut(230,220, 'WHALES!'); TextOut(165,320, 'Collect all of them.'); EndDoc; Image1.Free; end; end;
Und hier ist das Ergebnis:
Ein paar abschließende Hinweise:
- Dem angegebenen Dateinamen wird automatisch noch eine „1“ angehängt; diese ist die automatische Nummerierungsfunktion für mehrseitige Dokumente.
- Wichtig ist es, den Namen der Ausgabedatei VOR dem Aufruf von BeginDoc festzulegen, da er sonst nicht übernommen wird.
DISCLAIMER: Die Schildbeschriftungen geben nicht die Meinung von Gnostice oder Delphi-Treff wieder. Das Vorlagenbild entstammt einer Seite über lustige Protestschilder.