WinKi, так, на всякий случай: я никуда не пропал, изучаю функцию, которая должна прояснить ситуацию с альфой. Функция длинная, малой кровью обойтись не получится. Потихоньку двигаюсь в правильном, хотелось бы верить, направлении. Такой вот вопрос: 256-элементный массив структур RGBQUAD это, насколько я понимаю, палитра? И может ли альфа храниться в поле rgbReserved? Я понимаю, что мое незнание графической подсистемы и структуры BMP лечится посещением нескольких платных курсов или самообразованием, но мне сейчас не до этого...
Ever17 - the out of infinity (PC)
Сообщений 31 страница 35 из 35
Поделиться322007-12-12 09:49:23
rgbReserved (я зову его ARGB.A) - это и есть альфа-значение (а точнее, байт-маркер прозрачного цвета). Но, в 256-цветных оно может принимать лишь 2 значения - True (0x01) и False (0x00), причём нескольких ячеек палитры со значением True обычно быть НЕ может. Т.е. полноценная альфа в них храниться не может, потому что преобразование 8-битной картинки в 32-битную, происходит по алгоритму:
пиксель_32 := палитра_256_ячеек_ARGB[пиксель_8];
Есть, конечно, и "нестандартные" варианты ARGB, в которых все пиксели имеют в ARGB.A значение True или выше, но это не наш случай.
Отредактировано WinKi (2007-12-12 19:56:07)
Поделиться332007-12-18 08:16:31
Итак, теперь моя очередь каиться по поводу недельного отсутствия. Нет, дело не в праздниках - дело (эх, как всё прозаично) в деньгах на трубе. '
Сейчас дело обстоит так: написана гора и маленькая тележка функций и процедур для обработки данных изображений. Осталось лишь доделать и протестировать код для преобразования BMP\TGA\PRT\PNG и прочих форматов друг в друга (этим и займусь на Новый Год ).
P.S. Следующий скрин - не фейк. Получен на хакнутом пиратами экзешнике игры.
Отредактировано WinKi (2007-12-18 21:07:57)
Поделиться342007-12-18 20:06:46
Кстати, вчера тут решил в кои то веки поломать FFTA, и удивился извращённости алгоритма... 7 модификаций реализации LZ... А точнее - 3 и 4 других метода.
B[1] - управляющий байт B[2..n] - последующие 1xxxxxx: Count:=((B[1] SHR 3) AND $F) + 3; Back:=((B[1] AND $7) SHL 8) + B[2]; LZ, 1 byte 01xxxxx: Count:=(B[1] AND $3F) +1; Copy, 1 byte 001xxxx: Count:=(B AND 1F) + 2 FILL 0h, 1 byte 0001xxxx: Count:=((B[2] SHR 2) AND $30) + (B[1] AND $F) + 4; Back:=((B[2] AND $3F) SHL 8) + B[3] + 1; LZ, 1 byte 00000010: Count:=B[2]+3; FILL 0h, 1 byte 00000001: Count:=B[2]+3; FILL FFh, 1 byte 00000000: a:=B[2]+5; b:=(B[3] SHL 8) + B[4] + 1; LZ, 4 bytes
Поделиться352007-12-24 20:50:17
Эээ... есть маленькая просьба. Если возможно, необходимо разжиться файлом script.dat из Японской DVD-версии Ever17. Кидать в сжатом виде можно сюда: ever17@ya.ru
Заранее домо аригато.