Inscriber Technology通过Builder和Delphi - Alpha Channel支持

时间:2009-03-02 17:16:27

标签: delphi alpha getdibits

我正在与Inscriber Technology的Via Builder合作。此应用程序将TGA序列动画合并到一个单独的.via文件中,因此可以更好地加载大型序列,因为此文件已经过优化。有一些插件可以与一些Adobe产品一起使用。

我正在使用Delphi,我的问题是我无法从帧中恢复原始的alpha通道。使用他们的VIACODECLib_TLB库,我有以下功能:

function GetFrameBitmap(Frame: Integer): Integer;
来自IViaFile界面的

。该函数应该从原始序列返回帧位图的句柄。以下代码可以工作:

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并不起作用。

非常感谢任何帮助。

谢谢。

1 个答案:

答案 0 :(得分:0)

我建议你仔细看看你的同事可能有效的C ++代码。你可能错过了一些细节。有多少代码是Windows API,有多少是特定于供应商的图形代码? API的东西应该很容易转化为Delphi。

您可能会发现Delphi的TBitmap类不支持透明度,因此您需要使用其他一些图形支持库而不是普通的旧GDI。但是,如果您像GetDIBits一样获取原始位图数据,则至少应该能够看到alpha通道数据存在。 (你仍然需要找到一种正确显示位图的方法,但至少你知道你有正确的数据开始。)