-
на входе - байт, представляющий собой цвет в системе RGB (по два байта на цвет + 2 свободно(наверное)). Вопрос: как собственно преобразовать такой цвет в нормальный TColor? Пробовал преобразовывать байт в строку бинарного вида, а затем из битов составлял HEX-строку, представляющую собой строковое отображение цвета TColor. Проблема в том, что данная методика не помогает, цвета искажаются :(
-
Если все так, как ты сказал (в чем есть сомнения), то:
R := ColorByte and 3; G := ColorByte and (3 shl 2); B := ColorByte and (3 shl 4); Color := (B shl 16) or (G shl 8) or R;
Смещения проверь сам, мне влом.
-
Насколько я помню там первый байт - прозрачность, а все остальный и есть ,байты RGB.
-
> Смещения проверь сам, мне влом.
Красный - норм, а вот зеленый и синий не в порядке. А так - преобразует, но тоже с нарушением цвета :(
-
> tesseract © (24.04.08 13:12) [2] Там всего один байт. См. сабж.
> andreil © (24.04.08 13:24) [3] Значит, вот это неверно: по два бита на цвет + 2 свободно (или ты что-то другое имел в виду?)
-
В [1] похоже все правильно, кроме того, что цвета надо масштабировать. В двухбитном цвете только 4 градации. В восьмибитном цвете надо чтобы из $3 получился $FF, а из $0 - $00
-
Сделал так: for i:=tmp.miptex_t.width-1 downto 0 do
for n:=tmp.miptex_t.height-1 downto 0 do
begin
R := tmp.buf[i+n*tmp.miptex_t.Width] and 3;
G := tmp.buf[i+n*tmp.miptex_t.Width] and (3 shl 2);
B := tmp.buf[i+n*tmp.miptex_t.Width] and (3 shl 4);
r:=r*$55;
g:=g*$55;
b:=b*$55;
Color := (B shl 16) or (G shl 8) or R;
tmp.Mip1.Pixels[i,n]:=color;
end; Итог можете найти по ссылке: http://www.rapidshare.ru/656679lava1.bmp - то, что должно быть (полученно стонней программой Wally) lava1.mip1.bmp - то, что получилось с приведенным выше алгоритмом lava1.mip - текстура в вормате Ку1, которую и пытаюсь прочитать :) Получается более-менее читаемая картинка, но все-равно, не то, тк нарушены цвета (хоть и не так сильно).
-
Не знаю как в Q1, но чаще всего 8-битные картинки имеют совершенно другой формат: Имеется палитра (таблица цветов) вида индекс : цвет в формате RGB (или ARGB, или RGBA) обычно содержится в заголовке файла или отдельным файлом если несколько имеют одинаковую палитру. А далее массив из 8-битных индексов по которым в палитре и находится конкретный цвет.
-
> тк нарушены цвета
> Смещения проверь сам, мне влом.
а правильнее всего, и по скорости, и по гибкости const palette6bit = array[0..63] of TColor = (0, ...);
-
> Не знаю как в Q1, но чаще всего 8-битные картинки имеют > совершенно другой формат:
Я вообщето уже третий день мучаюсь, такчто проблему изучить успел ;) Мной было замечено, что в текстурах Ку1 кроме основной текстуры хранятся еще и мипмапы. А цвет там идет так, как я говорил, те без палитры, это просто необходимо преобразовать в БМП, тк ОпенГл не понимает (вроде как) голый массив пикселей.
-
Ты уверен, что цвет идет без палитры ? Что мешает использовать палитру основного изображения для мип-уровней ? > Я вообщето уже третий день мучаюсь, такчто проблему изучить > успел ;)Что-то долго... За 10 минут гуглом были найдены исходники всех трех квак (можно было и сразу на сайт ID зайти, но это не спортивно) и конверсия второй кваки на делфи. Смотрю исходники и вижу: 1) в файле gl_image.pas d_8to24table: array[0..256 - 1] of Cardinal; - массив из 256 элементов для перевода 8-битных значений в 24-битные. 2) в файле gl_draw.pas procedure Draw_Fill(x, y, w, h, c: Integer);
type
Tcolor = record
case boolean of
true: (c: Cardinal);
false: (v: array[0..3] of Byte);
end;
var
color: Tcolor;
begin
if (Cardinal(c) > 255) then
ri.Sys_Error(ERR_FATAL, 'Draw_Fill: bad color');
qglDisable(GL_TEXTURE_2D);
color.c := d_8to24table[c];
... 3) в том же файле qglTexImage2D( GL_TEXTURE_2D,
0,
GL_COLOR_INDEX8_EXT,
256, 256,
0,
GL_COLOR_INDEX,
GL_UNSIGNED_BYTE,
image8 ); и что-то мне смутно подсказывает, что этот самый GL_COLOR_INDEX8_EXT - это 8-битная индексация. Если что - http://sourceforge.net/project/showfiles.php?group_id=55303конверсия Q2 на делфи, если не находил - посмотри как там реализована загрузка мип-уровней.
-
> МистерТ
Спасибо за помощь! А то уже до рендера дошел, а вот с текстурами голяк :)
-
> МистерТ
Сами по себе эти исходники неполны, но таблицу преобразований вместе с ее загрузкой я выкопал. Текстуры грузятся на ОК, но местами вс-таки имеются нарушения цветопередачи, но это - недостатки таблицы, придется исправлять вручную :( А так - тема закрыта.
|