2009-03-02 31 views
0

我正在使用Inscriber Technology的Via Builder。這個應用程序將TGA序列動畫合併到一個.via文件中,因爲該文件已經過優化,所以加載大型序列會更好。有一些插件可以在一些Adobe產品中使用它。Inscriber Technology Via Builder和Delphi - Alpha Channel支持

我正在使用Delphi,而我的問題是我無法從框架中取回原始的Alpha通道。使用他們的VIACODECLib_TLB庫,我有以下功能:

function GetFrameBitmap(Frame: Integer): Integer; 

來自thaiaIVile接口。該函數應該從原始序列返回一個幀位圖的句柄。下面的代碼可以工作:

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

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

但是最終的位圖是沒有alpha通道的原始幀。實際上,整個圖像的alpha通道爲零。

假設我做錯了什麼,我嘗試使用GetDIBits函數,以確保某處有一個alpha通道。所以我分配了足夠長的內存來存儲位圖,假設它有4個通道並使用了GetDIBits函數。我得到了和以前相同的結果:正常幀,整個圖像的alpha通道爲零。

需要注意的是,Inscriber(其論壇已經死亡)聲稱其Via Builder具有完整的Alpha支持。我知道有人設法使用GetDIBits函數在C++上正確加載框架,但是將代碼「翻譯」爲Delphi並不起作用。

任何幫助將不勝感激。

謝謝。

回答

0

我建議你仔細看看你的同事的C++代碼,可能會工作。你可能錯過了一些細節。有多少代碼是Windows API,有多少是特定於供應商的圖形代碼? API的東西應該是翻譯成德爾福的一個小插曲。

您可能會發現Delphi的TBitmap類不支持透明度,因此您需要使用其他圖形支持庫而不是普通的舊GDI。但是,如果您像GetDIBits一樣獲取原始位圖數據,則至少應該能夠看到alpha通道數據在那裏。 (你仍然需要找到正確顯示位圖的方式,但至少你會知道你有正確的數據開始。)

+0

嗨,謝謝你的回答。我忘了提及我正在使用支持alpha混合(GR32)的圖形庫。使用GetDIBits,我只是複製函數返回的字節數組,結果是alpha通道全部設置爲零的原始幀。我會再看看C++代碼。謝謝。 – Rafael 2009-03-03 12:27:36