2009-03-02 3 views
0

私はInscriber TechnologyのVia Builderと一緒に作業しています。このアプリは、TGAシーケンスのアニメーションを1つの.viaファイルにマージします。このファイルが最適化されているので、大規模なシーケンスをロードする方がはるかに優れています。いくつかのAdobe製品でこれを使用するためのプラグインがあります。ビルダビルダとデルファイ - アルファチャネルのサポート

私はDelphiで作業しています。私の問題は、フレームから元のアルファチャンネルを取り戻せないということです。彼らのVIACODECLib_TLBライブラリを使用して、私は以下の機能を持っています:

function GetFrameBitmap(Frame: Integer): Integer; 

からIVaFileインターフェイス。この関数は元のシーケンスからフレームビットマップへのハンドルを返します。次のコードは動作します。

viaObject: IViaFile; 
bmp: TBitmap; 
index: Integer; 

bmp.Handle := ViaObject.GetFrameBitmap(index); 

しかし、結果のビットマップはアルファチャンネルのない元のフレームです。実際には、画像全体のアルファチャンネルはゼロです。

私は何か間違っていると仮定して、どこかにアルファチャンネルがあることを確認するために、GetDIBits関数を使ってみました。だから私はそれが4チャンネルを持っていたと仮定してビットマップを格納するのに十分な長さのメモリを割り当て、GetDIBits関数を使用しました。これまでと同じ結果が得られました。通常のフレーム、画像全体のアルファチャンネルゼロです。

Inscriber(フォーラムが死んでいる)は、Via Builderが完全なアルファベットをサポートしていると主張しています。私はGetDIBits関数を使ってC++でフレームを正しく読み込むことができた人を知っていますが、コードをDelphiに "翻訳"することはできませんでした。

ご協力いただければ幸いです。

ありがとうございます。

答えて

0

おそらく動作する同僚のC++コードを詳しく見てみることをお勧めします。あなたはおそらくいくつかの詳細を見逃していましたWindows APIのコードはどれくらいで、ベンダー固有のグラフィックスコードのどれくらいでしたか? APIはDelphiに翻訳するためのものです。

DelphiのTBitmapクラスは透過性をサポートしていない可能性があるので、普通の古いGDIではなく他のグラフィックサポートライブラリを使用する必要があります。しかし、生のビットマップデータをGetDIBitsのようにフェッチしている場合は、少なくともアルファチャンネルのデータがあることがわかります。 (まだビットマップを適切に表示する方法を見つける必要がありますが、少なくとも適切なデータがあればわかります)

+0

こんにちは、お返事ありがとうございます。私は、アルファブレンディング(GR32)をサポートするグラフィックライブラリを使用していると言いました。 GetDIBitsを使用して、私は関数によって返されたバイト配列をコピーしています。結果は、アルファチャンネルがすべてゼロに設定された元のフレームです。私はC++コードをもう一度見ていきます。ありがとう。 – Rafael