Hi there
I have a small test procedure to count how many times a color does occure within an image -> However it does not work, I think the issue is around FindColor() that I don't use correctly. Any idea where the mistake is?
Thanks in advance,
P.
I have a small test procedure to count how many times a color does occure within an image -> However it does not work, I think the issue is around FindColor() that I don't use correctly. Any idea where the mistake is?
Code (pascal) Select
procedure TForm1.Button1Click(Sender: TObject);
var
NumberOfColors: Integer;
ImageData: TImageData;
ImagingBitmap: TImagingBitmap;
Counter: Integer;
Palette: PPalette32;
ColorRecord: TColor32Rec;
ColorArray: Array of Integer;
Row, Col: Integer;
begin
NumberOfColors := 16;
SetLength(ColorArray, NumberOfColors);
ImagingBitmap := TImagingBitmap.Create;
InitImage(ImageData);
for Counter := 0 to NumberOfColors -1 do
ColorArray[Counter] := 0;
try
LoadImageFromFile('car1.png', ImageData);
ReduceColors(ImageData, NumberOfColors);
Palette := @ImageData.Palette;
//List all the colors
for Counter := 0 to NumberOfColors -1 do
Memo1.Lines.Add( IntToStr(Counter) + ':(' + IntToStr(Palette[Counter].R) + ',' +
IntToStr(Palette[Counter].G) + ',' +
IntToStr(Palette[Counter].B) + ')' );
//Count how many times a color is used
for Row := 0 to ImageData.Height -1 do begin
for Col := 0 to ImageData.Width -1 do begin
ColorRecord := GetPixel32(ImageData, Col, Row);
Counter := FindColor(Palette, NumberOfColors, ColorRecord.Color);
Inc(ColorArray[Counter]);
end;
end;
//List the counting result
for Counter := 0 to NumberOfColors -1 do
Memo2.Lines.Add( IntToStr(Counter) + ':' + IntToStr(ColorArray[Counter]) );
//Draw the image on the canvas
ImagingBitmap.AssignFromImageData(ImageData);
Form1.Canvas.Draw(0, 0, ImagingBitmap);
finally
FreeImage(ImageData);
ImagingBitmap.Free;
end;
end;
Thanks in advance,
P.