Справочник функций

Ваш аккаунт

Войти через: 
Забыли пароль?
Регистрация
Информацию о новых материалах можно получать и без регистрации:

Почтовая рассылка

Подписчиков: -1
Последний выпуск: 19.06.2015

Конвертировать BMP в 8 битный формат RRRGGGBB, чтобы загрузить в контроллер дисплея

9.0K
07 января 2011 года
mr_smit
64 / / 03.12.2006
Прошу помощи. Чего то я запутался. Итак. Есть дисплей от телефона 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").
360
07 января 2011 года
P*t*
474 / / 15.02.2007
А по аналогии сделать не получается?
Вроде вот так:
 
Код:
r1:=GetRValue(pix) shr 5;
g1:=GetGValue(pix) shr 5;
b1:=GetBValue(pix) shr 6;
pix:= (r1 shl 5) + (g1 shl 2) + b1;
9.0K
08 января 2011 года
mr_smit
64 / / 03.12.2006
Спасибо огромное!!! Всё правильно
Реклама на сайте | Обмен ссылками | Ссылки | Экспорт (RSS) | Контакты
Добавить статью | Добавить исходник | Добавить хостинг-провайдера | Добавить сайт в каталог