Ich arbeite mit Via Builder, von Inscriber Technology. Diese App führt eine TGA-Sequenzanimation in eine einzige .via-Datei zusammen, wodurch das Laden großer Sequenzen wesentlich erleichtert wird, da diese Datei optimiert ist. Für einige Adobe-Produkte gibt es Plugins.Inscriber-Technologie Via Builder und Delphi - Alpha-Kanal-Unterstützung
Ich arbeite an Delphi, und mein Problem ist, dass ich nicht den ursprünglichen Alphakanal von den Rahmen zurückbekommen kann. Mit ihrer VIACODECLib_TLB Bibliothek, ich habe die folgende Funktion:
function GetFrameBitmap(Frame: Integer): Integer;
von tha IViaFile Schnittstelle. Diese Funktion soll ein Handle zu einer Rahmenbitmap aus der ursprünglichen Sequenz zurückgeben. Der folgende Code könnte funktionieren:
viaObject: IViaFile;
bmp: TBitmap;
index: Integer;
bmp.Handle := ViaObject.GetFrameBitmap(index);
Die resultierende Bitmap ist jedoch das ursprüngliche Bild ohne Alphakanal. Tatsächlich ist sein Alphakanal für das gesamte Bild gleich Null.
Angenommen, ich habe etwas falsch gemacht, habe ich versucht, die GetDIBits-Funktion zu verwenden, um sicher zu sein, dass irgendwo ein Alpha-Kanal war. Also habe ich den Speicher lange genug zugewiesen, um die Bitmap zu speichern, vorausgesetzt, sie hatte 4 Kanäle und verwendete die GetDIBits-Funktion. Ich habe das gleiche Ergebnis wie vorher: normaler Rahmen, Alphakanal Null für das gesamte Bild.
Nur zu beachten, Inscriber (wessen Foren sind tot), behauptet, dass seine Via Builder hat volle Alpha-Unterstützung. Ich kenne jemanden, der es schaffte, die Frames in C++ mit der GetDIBits-Funktion korrekt zu laden, aber das "Übersetzen" des Codes nach Delphi funktionierte nicht.
Jede Hilfe würde sehr geschätzt werden.
Vielen Dank.
Hallo, vielen Dank für Ihre Antwort. Ich habe vergessen zu erwähnen, dass ich eine Grafikbibliothek benutze, die Alpha Blending (GR32) unterstützt. Mit den GetDIBits kopiere ich nur das Byte-Array, das von der Funktion zurückgegeben wird, und das Ergebnis ist der ursprüngliche Frame mit dem Alpha-Kanal, der alle auf Null gesetzt ist. Ich werde den C++ Code erneut suchen. Vielen Dank. – Rafael