Добрый день! Собственно нужна функция на ФП которая получая RGB-параметры возвращала бы номер этого(или максимально близкого к этому цвету) в стандартной палитре. [ RGBToP(const r, g, b:word):word; ] Желательно БЕЗ использования асм. Поиск особых результатов не дал(кроме не к чему не ведущей темы 2003-года)
Ответ-велосипед. Функция, которая требовалась изначально. Все комментарии были написаны раньше.
const MAX_PALETTE_INDEX = 255; type TRGB = record Red, Green, Blue : Byte end; TRGBPalette = array[0..MAX_PALETTE_INDEX] of TRGB;
function GetNearestPaletteIndex( RGBPalette : TRGBPalette; X : TRGB ) : Integer; var DD, MinDD : LongInt; I, Index : Integer; begin Index := 0; MinDD := Sqr(LongInt(X.Red) - RGBPalette[Index].Red) + Sqr(LongInt(X.Green) - RGBPalette[Index].Green) + Sqr(LongInt(X.Blue) - RGBPalette[Index].Blue); for I := 1 to MAX_PALETTE_INDEX do begin DD := Sqr(LongInt(X.Red) - RGBPalette[I].Red) + Sqr(LongInt(X.Green) - RGBPalette[I].Green) + Sqr(LongInt(X.Blue) - RGBPalette[I].Blue); if MinDD > DD then begin MinDD := DD; Index := I end end; GetNearestPaletteIndex := Index end;