0

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

我正在研究 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 支持。我知道有人设法在 C++ 上使用 GetDIBits 函数正确加载帧,但是将代码“翻译”为 Delphi 不起作用。

任何帮助将非常感激。

谢谢你。

4

1 回答 1

0

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

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

于 2009-03-02T20:33:21.583 回答