Главная страница
Top.Mail.Ru    Яндекс.Метрика
Текущий архив: 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
15-1186505837
hahol
2007-08-07 20:57
2007.09.02
помогите чайнику плз


15-1186529949
lookin
2007-08-08 03:39
2007.09.02
Время просчета пустой процедуры


1-1182935318
tytus
2007-06-27 13:08
2007.09.02
FastReport 4.2.52 неправильно работает MemoOnBeforePrint


8-1164717121
Ангела
2006-11-28 15:32
2007.09.02
Как преобразовать файл bmp?


15-1186305705
Pasha L
2007-08-05 13:21
2007.09.02
что такое "Относительное изменение функции"? (математика)