2012-03-30 12 views
2

Ich arbeite derzeit an einem Projekt mit dem Firemonkey-Framework. In diesem Projekt gibt es ein TImageControl als übergeordnetes Element, und untergeordnete Objekte sind mehrere TImage-Objekte und möglicherweise einige TEdit-Objekte.FMX: Flachen mehrere Bilder

Was ich tun möchte, ist, wenn der Benutzer auf eine Schaltfläche klickt, wird der Inhalt der TImage-Kinderobjekte in das der TImageControl Eltern übergehen, um eine Szene zu bilden, die dann in einer Datei gespeichert wird (und deshalb ist es wichtig, dass die relative Position der Kinder im endgültigen Bild erhalten bleibt). Mit der Texteigenschaft der TEdit-Kindersteuerelemente möchte ich, dass der Text in jedem TEdit an der relativen Position innerhalb des Elternteils auf das endgültige Bild geschrieben wird.

Ein Beispiel für das, was ich erreichen möchte, ist ähnlich der "Flatten Image" -Funktion in Adobe Photoshop, wo es alle Ebenen nimmt und sie in einer einzigen Ebene abflachen. Genau das möchte ich erreichen. Mit Text wird es einfach abgeflacht, als wäre es eine normale Bildebene, und Sie verlieren die Fähigkeit, den Text zu bearbeiten (da es sich jetzt um eine einzige Bildebene handelt).

Bisher konnte ich nur VCL-Beispiele finden, die die JPEG-Einheit nutzen. Nun wäre es zwar möglich, solchen Code anzupassen, um mit dieser Firemonkey-Anwendung (wie der "MonkeyMixer" -Methode) zu arbeiten, aber ich wäre daran interessiert zu wissen, ob es eine sauberere Methode gibt, die nativer für Firemonkey ist. Vielleicht etwas in Richtung children as TImage?

Ich bin offen für die Änderung der TImageControl übergeordnet zu einem anderen Komponententyp, wenn es besser geeignet ist, aber ich muss in der Lage sein, das endgültige Bild am Ende zu speichern.

+0

Hat die JPEG-Einheit tatsächlich andere VCL-Abhängigkeiten? Wenn nicht, dann könnte es leicht in FMX ohne irgendwelche Hacks verwendet werden. Wenn dies der Fall ist, könnte die Einheit möglicherweise modifiziert werden, um VCL-Abhängigkeiten zu entfernen? –

Antwort

2

Dieser Thread https://forums.embarcadero.com/thread.jspa?threadID=69764&tstart=30 schlägt vor:

var BMP: TBitmap; 
BMP := FireMonkeyObject.MakeScreenShot; 
BMP.SaveToFile('MyScreenShot.png'); 
BMP.Free; 

Plus Weitere mögliche Lösungen. (Ich habe keine Erfahrung persönlich).

+0

Entschuldigung für die ziemlich lange Verzögerung in der Antwort, aber das hat tatsächlich so funktioniert, wie ich es erwartet hatte. –