![]() |
| ||
|
|
Новости |
Поиск |
FAQ |
Статьи |
Книги |
Новости VCL
| | Форумы ЧАТ |
Орешник |
|
| |||
| |||
« предыдущая ветвь | форум | следующая ветвь »
Вот такой вот интересный вопрос...
cypher © (2002-06-20 00:20:00)... как преобразовать цвет из TrueColor в 256 цветов? Тоесть, имеем RGB = {255,255,255), нада получить RGB(8,8,8). Очень нужно!
MBo (2002-06-21 06:36:00) [1]>Мне нужно не меняя палитры найти наиболее подходящий цвет в 256 цветах...
Изучи функции работы с палитрами. 8-бит палитра состоит из 256 элементов TRGBQuad, т.е. каждому НОМЕРУ цвета соответствует некое соотношение R,G и B. Получи палитру, сравни составляющие своего цвета со всеми элементами палитры, по некому критерию макс. правдоподобия найди номер ближайшего цвета.
Вот пример для обратной задачи- задание серой палитры.
Функций для работы с палитрами много (WinSDK Help)
procedure TForm1.Button1Click(Sender: TObject);
var a:array[0..255,0..255] of byte;
ct:array[0..255] of TRGBQuad;
b:tbitmap;
i,j:integer;
begin
b:=tbitmap.create;
b.pixelformat:=pf8bit;
b.Width := 256;
b.Height := 256;
for i:=0 to 255 do begin
ct[i].rgbRed:=i;
ct[i].rgbBlue:=i;
ct[i].rgbGreen:=i;
ct[i].rgbReserved:=0;
end;
for i:=0 to 255 do for j:=0 to 255 do a[i,j]:=trunc(sqrt(i*j));
SetDIBColorTable(b.canvas.Handle,0,$100,ct);
SetBitmapBits(b.Handle, sizeof(a),@a);
Image1.picture.assign(b);
b.free;
end;
AK-74 (2002-06-21 00:09:00) [2]Я же говорю: надо делить (а не с поллитрами работать :)
function RGB_To_256(r,g,b: Integer): Integer;
begin
result := r div 32 * 32 + g div 32 * 4 + b div 64
end;
MBo (2002-06-20 20:18:00) [3]256 цветов могут быть разными
cypher (2002-06-20 19:36:00) [4]Неее... обьясню задачу..
У меня есть цвет RGB - три числа Red, Green и Blue...
Мне нужно не меняя палитры найти наиболее подходящий цвет в 256 цветах...
Ну как в Paint"e открыть какой-нить 24битный bmp-файл и сохранить его в 256-цветном варианте, только мне не картинку нада преобразовать, а всего ОДИН цвет. Помогите плиз, очень нужно победить эту задачу.
MBo (2002-06-20 07:41:00) [5]BTW, битмап проще всего перевести в 256 так
ABitmap.PixelFormat:=pf8bit;
MBo (2002-06-20 06:51:00) [6]В 256-режиме нужно создавать палитру
AK-74 (2002-06-20 03:21:00) [7]А просто разделить на 32 нельзя?