我正在与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并不起作用。
非常感谢任何帮助。
谢谢。
答案 0 :(得分:0)
我建议你仔细看看你的同事可能有效的C ++代码。你可能错过了一些细节。有多少代码是Windows API,有多少是特定于供应商的图形代码? API的东西应该很容易转化为Delphi。
您可能会发现Delphi的TBitmap
类不支持透明度,因此您需要使用其他一些图形支持库而不是普通的旧GDI。但是,如果您像GetDIBits
一样获取原始位图数据,则至少应该能够看到alpha通道数据存在。 (你仍然需要找到一种正确显示位图的方法,但至少你知道你有正确的数据开始。)