2009-03-02 7 views
0

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.

Antwort

0

Ich schlage vor, dass Sie sich den C++ - Code Ihres Kollegen genauer ansehen, der angeblich funktioniert. Sie haben wahrscheinlich ein paar Details übersehen. Wie viel Code war Windows API und wie viel davon war ein herstellerspezifischer Grafikcode? Das API-Zeug sollte ein Kinderspiel sein, um es in Delphi zu übersetzen.

Sie könnten feststellen, dass Delphi TBitmap Klasse Transparenz nicht unterstützt, so dass Sie eine andere Grafik-Support-Bibliothek anstelle von einfachen alten GDI verwenden müssen. Aber wenn Sie die rohen Bitmap-Daten wie mit GetDIBits abrufen, sollten Sie zumindest sehen können, dass die Alpha-Kanal-Daten vorhanden sind. (Sie müssten immer noch eine Möglichkeit finden, die Bitmap korrekt anzuzeigen, aber zumindest würden Sie wissen, dass Sie die richtigen Daten hatten.)

+0

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