вот я присобачил 2 версии в один модуль немного подкрутив одно к другому.
Код: Выделить всё
program units_test;
{$mode objfpc}{$H+}
uses
{$IFDEF UNIX}{$IFDEF UseCThreads}
cthreads,
{$ENDIF}{$ENDIF}
Classes, RGB2HSV
{ you can add units after this };
var
h, s, v: integer;
aclr: TFColor;
r: THSBColor;
begin
aclr.r:= 100;
aclr.g:= 125;
aclr.b:= 255;
RGB2HSV.RGB2HSV(PFColor(@aclr), h, s, v);
r:= RGB2HSV.rgbtohsb(aclr);
writeln('R=', aclr.r, ' G=', aclr.g, ' B=', aclr.b, ' H= ', h,' S= ', s,' V= ', v);
writeln('R=', aclr.r, ' G=', aclr.g, ' B=', aclr.b, ' H= ', r.hue:2:3,' S= ', r.saturnation:2:3,' V= ', r.brightness:2:3);
writeln;
aclr.r:= 255;
aclr.g:= 125;
aclr.b:= 100;
r:= RGB2HSV.rgbtohsb(aclr);
RGB2HSV.RGB2HSV(PFColor(@aclr), h, s, v);
writeln('R=', aclr.r, ' G=', aclr.g, ' B=', aclr.b, ' H= ', h,' S= ', s,' V= ', v);
writeln('R=', aclr.r, ' G=', aclr.g, ' B=', aclr.b, ' H= ', r.hue:2:3,' S= ', r.saturnation:2:3,' V= ', r.brightness:2:3);
writeln;
aclr.r:= 255;
aclr.g:= 254;
aclr.b:= 253;
r:= RGB2HSV.rgbtohsb(aclr);
RGB2HSV.RGB2HSV(PFColor(@aclr), h, s, v);
writeln('R=', aclr.r, ' G=', aclr.g, ' B=', aclr.b, ' H= ', h,' S= ', s,' V= ', v);
writeln('R=', aclr.r, ' G=', aclr.g, ' B=', aclr.b, ' H= ', r.hue:2:3,' S= ', r.saturnation:2:3,' V= ', r.brightness:2:3);
writeln;
aclr.r:= 255;
aclr.g:= 255;
aclr.b:= 255;
r:= RGB2HSV.rgbtohsb(aclr);
RGB2HSV.RGB2HSV(PFColor(@aclr), h, s, v);
writeln('R=', aclr.r, ' G=', aclr.g, ' B=', aclr.b, ' H= ', h,' S= ', s,' V= ', v);
writeln('R=', aclr.r, ' G=', aclr.g, ' B=', aclr.b, ' H= ', r.hue:2:3,' S= ', r.saturnation:2:3,' V= ', r.brightness:2:3);
writeln;
aclr.r:= 0;
aclr.g:= 0;
aclr.b:= 0;
r:= RGB2HSV.rgbtohsb(aclr);
RGB2HSV.RGB2HSV(PFColor(@aclr), h, s, v);
writeln('R=', aclr.r, ' G=', aclr.g, ' B=', aclr.b, ' H= ', h,' S= ', s,' V= ', v);
writeln('R=', aclr.r, ' G=', aclr.g, ' B=', aclr.b, ' H= ', r.hue:2:3,' S= ', r.saturnation:2:3,' V= ', r.brightness:2:3);
writeln;
aclr.r:= 1;
aclr.g:= 1;
aclr.b:= 1;
r:= RGB2HSV.rgbtohsb(aclr);
RGB2HSV.RGB2HSV(PFColor(@aclr), h, s, v);
writeln('R=', aclr.r, ' G=', aclr.g, ' B=', aclr.b, ' H= ', h,' S= ', s,' V= ', v);
writeln('R=', aclr.r, ' G=', aclr.g, ' B=', aclr.b, ' H= ', r.hue:2:3,' S= ', r.saturnation:2:3,' V= ', r.brightness:2:3);
readln;
end.
1. берете пиксел, получаете его значения rgb
2. с помощью одной из этих функций получаете значение оттенка - H (0 - 360)
3. определяете в какой цвет он "попал", например, "на глаз", если 0< H <20 - красный, если 21 < H < 40 - оранжевый и т.д., полученный цвет запоминаем
4. после того как просмотрели все пиксели - мы будем знать какие цвета присутствуют на картинке.