Hi,
... Ich weiß nicht genau was bei dir schief läuft. Ich habe mal selbst eine Funktion geschrieben, die, soweit ich sie getestet habe, funktioniert.
Ich hoffe ich werde nicht erschlagen weil ich fertigen Code poste.
Delphi-Quellcode:
TIntArray =
Array of Integer;
function CountColors(bmp: TBitmap; Colors:
Array of TColor): TIntArray;
var i,j,k: Integer;
old: TPixelformat;
x: PRGBQuad;
tmp: TColor;
begin
SetLength(Result,Length(Colors));
old := bmp.PixelFormat;
// Pixelformat sichern
bmp.PixelFormat := pf32Bit;
//Mit 32-Bit Bitmaps gehts schneller
for i := 0
to bmp.Height-1
do
begin
x := bmp.ScanLine[i];
for j:= 0
to bmp.Width-1
do
begin
tmp :=
RGB(x^.rgbRed,x^.rgbGreen,x^.rgbBlue);
for k := 0
to High(Colors)
do
if Colors[k] = tmp
then
inc(Result[k]);
inc(x);
end;
end;
bmp.PixelFormat := old;
// Altes Pixelformat wiederherstellen
end;
Gruß
Neutral General
Michael
"Programmers talk about software development on weekends, vacations, and over meals not because they lack imagination,
but because their imagination reveals worlds that others cannot see."