Inscriber Technology の Via Builder を使用しています。このアプリは、TGA シーケンス アニメーションを 1 つの .via ファイルにマージし、このファイルが最適化されているため、大きなシーケンスをロードする方がはるかに優れています。一部のアドビ製品でこれを使用するためのプラグインがあります。
私は Delphi に取り組んでいますが、私の問題は、フレームから元のアルファ チャネルを取り戻せないことです。VIACODECLib_TLB ライブラリを使用して、次の関数を作成しました。
function GetFrameBitmap(Frame: Integer): Integer;
IViaFile インターフェイスから。この関数は、元のシーケンスからフレーム ビットマップへのハンドルを返すことになっています。次のコードが機能する可能性があります。
viaObject: IViaFile;
bmp: TBitmap;
index: Integer;
bmp.Handle := ViaObject.GetFrameBitmap(index);
しかし、結果として得られるビットマップは、アルファ チャネルのない元のフレームです。実際には、そのアルファ チャネルは画像全体でゼロです。
何か間違ったことをしていると仮定して、GetDIBits 関数を使用して、アルファ チャネルがどこかにあることを確認しました。そのため、ビットマップに 4 つのチャネルがあり、GetDIBits 関数を使用すると仮定して、ビットマップを格納するのに十分な長さのメモリを割り当てました。以前と同じ結果が得られました。通常のフレーム、画像全体のアルファ チャンネル ゼロです。
Inscriber (そのフォーラムは終了しています) は、Via Builder が完全なアルファ版をサポートしていると主張しています。GetDIBits 関数を使用して C++ でフレームを正しくロードできた人を知っていますが、コードを Delphi に「変換」することはできませんでした。
どんな助けでも大歓迎です。
ありがとうございました。