Версия для печати темы
Нажмите сюда для просмотра этой темы в оригинальном формате
Форум программистов > Delphi: Звук, графика и видео > Конвертировать BMP в 8 битный формат RRRGGGBB


Автор: mr_smit 7.1.2011, 16:39
Прошу помощи. Чего то я запутался. Итак. Есть дисплей от телефона Siemens S65, подключенный к контроллеру ATMega8. Дисплей цветной, 176х132 пикселей. Отображает 65536 цветов, 16 бит (по 2 байта на пиксель). Работает в режиме цветопередачи R5G6B5.

Есть процедура конвертации изображения в формат R5G6B5:
Код

var
r1,g1,b1:integer;
s,ss:String;
pix:TColor;
...
Image1.Picture.LoadFromFile(OpenPictureDialog1.FileName);
...
  for i:=0 to Image1.Picture.Height-1 do
    begin
      for k:=0 to Image1.Picture.Width-1 do
        begin
          // т.е. с каждым пикселем проделываем следующее:
          pix:= Image1.Canvas.Pixels[k,Image1.Picture.Height-1-i];
          r1:=GetRValue(pix) shr 3;
          g1:=GetGValue(pix) shr 2;
          b1:=GetBValue(pix) shr 3;
          pix:= (r1 shl 11) + (g1 shl 5) + b1;
            ss:= ss + '0x'+IntToHex(pix,4)+', ';
            ...
        end;
    end;
...

В результате получаем текстовый файл примерно такого содержания: "0xF800, 0x07E0, 0x001F, 0x0000, 0xFFFF". Дальше я это просто вставляю в прошивку контроллера, компилирую. Всё цвета прекрасно выводятся на дисплей.

Красный: 0xF800
Зеленый: 0x07E0
Синий: 0x001F
Черный: 0x0000
Белый: 0xFFFF

Но, согласно документации, дисплей может так же работать и в 8 битном режиме RRRGGGBB. Пусть и качество при этом пострадает, зато уменьшится размер занимаемый картинкой в прошивке (останется место для написания доп. функций).

Как мне изменить процедуру конвертации чтобы получить 8 битный цвет (я так понимаю чтобы было что то типа такого: "0хАА, 0х02, 0хFF").

Автор: mr_smit 8.1.2011, 00:05
Ответ:
Код

r1:=GetRValue(pix) shr 5;
g1:=GetGValue(pix) shr 5;
b1:=GetBValue(pix) shr 6;
pix:= (r1 shl 5) + (g1 shl 2) + b1;


Вопрос снимается.

Powered by Invision Power Board (http://www.invisionboard.com)
© Invision Power Services (http://www.invisionpower.com)