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;
...
Конвертировать BMP в 8 битный формат RRRGGGBB, чтобы загрузить в контроллер дисплея
Есть процедура конвертации изображения в формат R5G6B5:
Код:
В результате получаем текстовый файл примерно такого содержания: "0xF800, 0x07E0, 0x001F, 0x0000, 0xFFFF". Дальше я это просто вставляю в прошивку контроллера, компилирую. Всё цвета прекрасно выводятся на дисплей.
Красный: 0xF800
Зеленый: 0x07E0
Синий: 0x001F
Черный: 0x0000
Белый: 0xFFFF
Но, согласно документации, дисплей может так же работать и в 8 битном режиме RRRGGGBB. Пусть и качество при этом пострадает, зато уменьшится размер занимаемый картинкой в прошивке (останется место для написания доп. функций).
Как мне изменить процедуру конвертации чтобы получить 8 битный цвет (я так понимаю чтобы было что то типа такого: "0хАА, 0х02, 0хFF").
Вроде вот так:
Код:
r1:=GetRValue(pix) shr 5;
g1:=GetGValue(pix) shr 5;
b1:=GetBValue(pix) shr 6;
pix:= (r1 shl 5) + (g1 shl 2) + b1;
g1:=GetGValue(pix) shr 5;
b1:=GetBValue(pix) shr 6;
pix:= (r1 shl 5) + (g1 shl 2) + b1;
Спасибо огромное!!! Всё правильно