Текущий архив: 2007.09.02;
Скачать: CL | DM;
Вниз
Проблемы с графикой в Delphi, Индексирование цвета Найти похожие ветки
← →
zzz(KOT)zzz © (2007-06-17 15:16) [0]Помогите пожалуйста, скажите как в Delphi:
— если знаешь цвет точки(Tcolor), получить ее индекс(Byte);
— если знаешь индекс точки, получить ее цвет;
Используется стандартная палитра Windows 256 цветов(8 bits).
← →
Kolan © (2007-06-17 15:46) [1]RGB функция?
← →
MBo © (2007-06-18 06:37) [2]GetNearestPaletteIndex
(понадобится логическая палитра, выбранная в целевом контексте)
← →
zzz(KOT)zzz © (2007-06-18 12:00) [3]А как задать эту логическую палитру, чтобы в итоге индексы соответствовали стандартным виндоусовским. Нашел в инете кое какую инфу, че т не получается:
FLogPal: LogPalette;
FHPal: HPalette;
s: TColor;
i: Integer;
FLogPal.palVersion := $300;
FLogPal.palNumEntries := 256; //2^BPP
FHPal := CreatePalette(PLogPalette(@FLogPal)^);
s := RGB(xx,xx,xx);
i := GetNearestPaletteIndex(FHPal,s);
Находится какой то индекс, но уж больно левый, не тот, который мне нужен.
← →
Efir © (2007-06-18 12:12) [4]Лучше разобраться с API ф-цией GetDIBColorTable/SetDIBColorTable, по-моему удобней будет, чем создавать логическую палитру.
← →
MBo © (2007-06-18 13:28) [5]У тебя же FLogPal мусором заполнена.
Откуда брать палитру, я уже сказал.
← →
zzz(KOT)zzz © (2007-06-18 15:31) [6]Написал:
procedure TForm1.Button1Click(Sender: TObject);
var
s: TColor;
i: integer;
BitMap: TBitMap;
FHPal: HPalette;
FLogPal: LogPalette;
begin
BitMap := TBitMap.Create;
BitMap.LoadFromFile("c:\1.bmp");
BitMap.PixelFormat := pf8bit;
FLogPal.palVersion := $300;
FLogPal.palNumEntries := 256;
GetPaletteEntries(BitMap.Palette, 0, FLogPal.palNumEntries,
FLogPal.palPalEntry);
FHPal := CreatePalette(PLogPalette(@FLogPal)^);
s := RGB(0,0,0);
i := GetNearestPaletteIndex(FHPal,s);
Label1.Caption := IntToStr(i);
end;
Но что - то опять не нравиться. Пошагово проверяю, значения в принципе находит правильно. Но в конце выполнения выдает асемблеровский код и непонятно о чем ошибку Project.exe faulted with message: "access violation at 0x00c020c0 read of address 0x00c020c0". Process Stopped. Use Step or Run to continue.
← →
MBo © (2007-06-18 15:45) [7]GetNearestPaletteIndex(Bitmap.Palette, AColor)
← →
zzz(KOT)zzz © (2007-06-18 15:48) [8]MBo, Спасибо!!! Офигенно помог =)))))
FLogPal.palVersion := $300;
FLogPal.palNumEntries := 256;
GetPaletteEntries(BitMap.Palette, 0, FLogPal.palNumEntries,
FLogPal.palPalEntry);
FHPal := CreatePalette(PLogPalette(@FLogPal)^);
этот код вообще лишним был...)))
← →
zzz(KOT)zzz © (2007-06-18 22:11) [9]А по индексу цвет можно узнать?
← →
Efir © (2007-06-18 22:23) [10]var
ColorTable256:array [0..255] of RGBQUAD;
GetDIBColorTable(Bitmap.Canvas.Handle,0,256,ColorTable256);
В массиве ColorTable256 вся палитра 8-битного битмапа.
← →
Германн © (2007-06-19 02:22) [11]
> zzz(KOT)zzz © (17.06.07 15:16)
>
> Помогите пожалуйста, скажите как в Delphi:
> — если знаешь цвет точки(Tcolor), получить ее индекс(Byte);
>
А что есть "индекс точки"?
← →
zzz(KOT)zzz © (2007-06-19 20:22) [12]Палитра 8 bit-ной картинки составлена из 256 цветов, у каждого цвета есть свой индекс 0..255.
Страницы: 1 вся ветка
Текущий архив: 2007.09.02;
Скачать: CL | DM;
Память: 0.49 MB
Время: 0.029 c