Inscriber Technology Via Builder и Delphi - поддержка альфа-канала - PullRequest
0 голосов
/ 02 марта 2009

Я работаю с 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 Ответ

0 голосов
/ 02 марта 2009

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

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

...