Delphi-PRAXiS

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   Multimedia (https://www.delphipraxis.net/16-multimedia/)
-   -   Delphi Inhalt von timage32 mit Layer speichern (https://www.delphipraxis.net/77947-inhalt-von-timage32-mit-layer-speichern.html)

Rudirabbit 27. Sep 2006 07:32


Inhalt von timage32 mit Layer speichern
 
Hallo !
Ich baue gerade ein Bildbearbeitungsprogramm, nutze dazu graphics32.
Habe eigentlich alles, was ich einbauen wollte drin (drehen,skalieren,layers..)
Wenn ich aber das Ergebnis via. savetofile speichere, fehlen die Layer !
Habe dies : procedure ExecDrawLayers(Dest: TBitmap32; Stage: Integer); virtual;
auch schon versucht, funzt nicht :wall:

MFG !

dizzy 27. Sep 2006 14:36

Re: Inhalt von timage32 mit Layer speichern
 
Ich nehme an, dass die Layer auch als solche separat bleiben sollen, und nicht mit dem Hintergrund final vereinigt werden. Dann gibt es 2 Varianten.

1) Du speicherst als normales Windows-Bitmap:
Das .bmp Format kann keine Layer speichern - es ist in der Spezifikation niemals vorgesehen worden. Einzige Chance: Jeden Layer separat als eigenes Bitmap speichern, und zusätzlich ein weiteres Bitmap für den jeweiligen Alphakanal. Um alle Layer und Kanäle zusammenzuhalten, böte sich ein eigenes Dateiformat an, in dem hinterlegt ist welche Dateien zusammen gehören.

2) Du implementierst Routinen zum speichern in Bildformaten, die diese Möglichkeit von sich aus bieten:
Als da wären: TGA, Photoshop, TIFF (glaube ich) und evtl. noch ein paar weitere. Es gibt hier und da Libraries die das können, und wenn man selbst dran will wäre http://www.wotsit.org vermutlich die erste Anlaufstelle für Infos zu den Formaten.



Naja, ein dritter Weg wäre es, ein komlpett eigenständiges Format zu entwickeln, dass das kann. Jedoch ist das wohl die schlechteste aller Lösungen, da keine andere Software diese lesen können wird. Da lohnt es sich denke ich mehr, ein wenig Arbeit in die Implementierung diverser (Quasi-)Standards wie in Punkt 2 genannt zu stecken.

Rudirabbit 27. Sep 2006 19:12

Re: Inhalt von timage32 mit Layer speichern
 
Hallo !
@dizzi: THX, für deine Lösungen, habe deinen 1. Vorschlag benutzt, mit Drawto werden die Layer draufgemalt, und als BMP abgespeichert.
Zitat:

Ich nehme an, dass die Layer auch als solche separat bleiben sollen, und nicht mit dem Hintergrund final vereinigt werden
Dies habe ich schon versucht, wie wäre das möglich ? :zwinker:
ExecDrawLayers ist wohl der falsche Weg, scheint für den direkten Aufruf nicht vorgesehen.

Ich will nicht z.b den Photoshop nachproggen, es soll eine JPEG Bilddatei einlesen, evtl. skalieren wenn nötig, oder drehen, und ein Wasserzeichen oä. plazieren.

Das Ganze soll als dann wieder als Jpeg gespeichert werden, was im Moment nicht richtig funzt, als bmp ist alles i.O.
Habe aber die Lösung mit Suchen :mrgreen: gefunden. Zwar noch nicht getestet, denke aber schon das es so funzt.


MFG !

BTW: graphics32 ist geiles plugin :-D , nur die Hilfedatei ist nicht die Beste !

dizzy 27. Sep 2006 22:41

Re: Inhalt von timage32 mit Layer speichern
 
Zitat:

Zitat von Rudirabbit
Hallo !
@dizzi: THX, für deine Lösungen, habe deinen 1. Vorschlag benutzt, mit Drawto werden die Layer draufgemalt, und als BMP abgespeichert.
Zitat:

Ich nehme an, dass die Layer auch als solche separat bleiben sollen, und nicht mit dem Hintergrund final vereinigt werden
Dies habe ich schon versucht, wie wäre das möglich ? :zwinker:

Öhm, halt mit den 2 vorgestellten Varianten ;). Du wolltest also tatsächlich die Layer "fest einrechnen" - ich dachte eben das nicht. Aber klappt ja nu ^^.

Zitat:

und ein Wasserzeichen oä. plazieren.
Wenn das vollautomatisch passiert, kannst du dir die Layer auch ganz sparen. Einfach das Wasserzeichen in einem separaten Bitmap vorhalten, und via Draw() in das Zielbild zeichnen. Fertig. Layer sind eigentlich aus 2 anderen Gründen da: Einmal die Möglichkeit eben Schichten (auch bei der persistenten Speicherung) getrennt zu halten, und um die Implenmentierung zu vereinfachen wenn Schichten vom User bewegt/modifiziert/hinzugefügt/gelöscht werden sollen.

Zitat:

BTW: graphics32 ist geiles plugin :-D , nur die Hilfedatei ist nicht die Beste !
Och, ich kam bislang mit der Hilfe ganz gut zurecht ;) (Aber es ist schon selten, dass überhaupt mal jemand die Hilfe entdeckt hat... :mrgreen:)

lg,
dizzy

Rudirabbit 28. Sep 2006 18:58

Re: Inhalt von timage32 mit Layer speichern
 
Hi !
Zitat:

Einfach das Wasserzeichen in einem separaten Bitmap vorhalten
Also - etwas Komfort soll schon drin sein :wink:
Nun das Wasserzeichen - es soll vom Anwender in beliebiger Position auf Hintergrund plaziert werden können.
Habe es so gelöst:
Wenn das Wasserzeichen als neuer Layer, zu sehen ist, kann man mit der Maus draufkicken, und es nach Wunsch verschieben.
Funzt auch wenn ich Zoome :-D (scale<>1), dann ist etwas Rechnerei in der onmousemove nötig.

Zitat:

Och, ich kam bislang mit der Hilfe ganz gut zurecht (Aber es ist schon selten, dass überhaupt mal jemand die Hilfe entdeckt hat... )
Arbeite mit der Komponente erst seit kurzem :oops:

Also - THX für deine Hilfe :-D


MFG Rudi !


Alle Zeitangaben in WEZ +1. Es ist jetzt 14:07 Uhr.

Powered by vBulletin® Copyright ©2000 - 2024, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2023 by Daniel R. Wolf, 2024 by Thomas Breitkreuz