Inscriber Technology Via Builder и Delphi - поддержка альфа-канала

Я работаю с Via Builder от Inscriber Technology. Это приложение объединяет анимацию последовательности TGA в один файл.via, что значительно упрощает загрузку больших последовательностей, поскольку этот файл оптимизирован. Есть плагины для использования с некоторыми продуктами Adobe.

Я работаю над Delphi, и моя проблема в том, что я не могу вернуть оригинальный альфа-канал из фреймов. Используя их библиотеку VIACODECLib_TLB, у меня есть следующая функция:

function GetFrameBitmap(Frame: Integer): Integer;

из интерфейса IViaFile. Эта функция должна возвращать дескриптор растрового изображения кадра из исходной последовательности. Следующий код может работать:

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

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

Но в результате растровое изображение является исходным кадром без альфа-канала. На самом деле, его альфа-канал равен нулю для всего изображения.

Предполагая, что я делаю что-то не так, я попытался использовать функцию GetDIBits, чтобы быть уверенным, что где-то есть альфа-канал. Поэтому я выделил достаточно памяти для хранения растрового изображения, предполагая, что в нем 4 канала, и использовал функцию GetDIBits. Я получил тот же результат, что и раньше: обычный кадр, нулевой альфа-канал для всего изображения.

Отметим, что Inscriber (чьи форумы мертвы) утверждает, что его Via Builder имеет полную альфа-поддержку. Я знаю человека, которому удалось правильно загрузить фреймы на C++ с помощью функции GetDIBits, но "перевод" кода в Delphi не сработал.

Любая помощь приветствуется.

Спасибо.

1 ответ

Я предлагаю вам поближе взглянуть на C++ код вашего коллеги, который предположительно работает. Вы, вероятно, пропустили некоторые детали. Какую часть кода составлял Windows API, а какой - какой-то специфический графический код поставщика? Материал API должен быть легким для перевода на Delphi.

Вы можете обнаружить, что Delphi's TBitmap Класс не поддерживает прозрачность, поэтому вам нужно использовать другую библиотеку с графической поддержкой вместо старого GDI. Но если вы выбираете необработанные растровые данные, как с GetDIBitsвы должны хотя бы увидеть, что данные альфа-канала есть. (Вам все равно нужно найти способ правильного отображения растрового изображения, но, по крайней мере, вы будете знать, что у вас были правильные данные для начала.)

Другие вопросы по тегам