
07.10.2009, 15:28
|
Прохожий
|
|
Регистрация: 16.04.2009
Сообщения: 33
Репутация: 10
|
|
неее, нужно посчитать сколько всего цветов в картинке и вывести какие это конкретно цвета! Как посчитать сколько цветов я нашел:
Код:
function HowManyColors(Bitmap: TBitmap): Integer;
type
TRGB = record
B, G, R: Byte;
end;
pRGB = ^TRGB;
var
i: Byte;
x, y: Integer;
Dest: pRGB;
RGBArray: array[0..255, 0..255] of array of Byte;
begin
Bitmap.PixelFormat := pf24Bit;
Result := 0;
for y := 0 to Bitmap.Height - 1 do
begin
Dest := Bitmap.ScanLine[y];
for x := 0 to Bitmap.Width - 1 do
begin
with Dest^ do
if RGBArray[r, g] <> nil then
for i := 0 to High(RGBArray[r, g]) do
begin
//если такой цвет уже есть, то выходим из цыкла
if RGBArray[r, g][i] = b then
Break;
//если это последний круг цикла, то такого цвета нет
if i = High(RGBArray[r, g]) then
begin
Inc(Result); //прибавляем один цвет
SetLength(RGBArray[r, g], Length(RGBArray[r, g]) + 1);
RGBArray[r, g][High(RGBArray[r, g])] := b;
end;
end
else
begin
Inc(Result);
SetLength(RGBArray[r, g], 1);
RGBArray[r, g][0] := b;
end;
Inc(Dest);
end;
end;
end;
Пример использования:
procedure TForm1.MMHowManyColorsClick(Sender: TObject);
var
str: string;
begin
Screen.Cursor := crHourGlass;
try
str := Format('Изображение содержит %d цветов.', [HowManyColors(FBitmap)]);
finally
Screen.Cursor := crDefault;
end;
Application.MessageBox(PChar(str), PChar(Application.Title), MB_OK);
end;
А вот как получить эти цета??? То есть например если цветов на картинке встречается 3 штуки, то вывести:
Цвет 1 - код цвета;
Цвет 2 - код цвета;
Цвет 3 - код цвета;
|