Zitat:
Statt des ByteArray kannst Du eine Array of TRGBQuad verwenden
Der Umweg über String und ein Memo im besonderen werden das ganze extrem ausbremsen.
Ich würde den Vergleich direkt über die Scanlines machen
Hallo Bummi versuche gerade deine Vorschäge umzusetzen. Aber es hapert noch etwas.
- Wie rufe ich den hier die zusammengefasste Farbe ab und für was benutzt man die rgbReserved?
Zitat:
... pscanLine32[j].rgbReserved ...
... pscanLine32[j].rgbBlue ...
... pscanLine32[j].rgbRed ...
... pscanLine32[j].rgbGreen ...
- So möchte ich die beiden Pixel des gesamten 1. Bildes mit dem Ausschnitt des 2. Bildes vergleichen.
if pscanLineBILD[j] = pscanLineGesuchtesBILD[j] then .....
So geht's nicht. Ich vermute mal das ich eben zuerst die 3
RGB Farben zusammenfassen muss und dann diese vergleichen muss, oder?
habe es noch mit:
RGB(r,g,b) versucht aber irgendwie geht das nicht
So siehts bei mir mom. aus:
Delphi-Quellcode:
var
Bild: TBitmap;
GesuchtesBild: TBitmap;
p: PBytearray;
zeile, spalte: integer;
r, g, b: byte;
pscanLineBILD : pRGBQuadArray;
pscanLineGesuchtesBILD : pRGBQuadArray;
i,i2,j,j2:Integer;
begin
Bild:=form1.Image1.Picture.Bitmap;
gesuchtesBild:=form1.Image2.Picture.Bitmap;
for i := 0 to Bild.Height -1 do
begin
pscanLineBILD := Bild.Scanline[i];
for j := 0 to bild.Width -1 do
begin
b:= pscanLineBILD[j].rgbBlue;
r:= pscanLineBILD[j].rgbRed;
g:= pscanLineBILD[j].rgbGreen;
end;
//Abfrage ob 1. Pixel des gesuchten Bildes übereinstimmt
if pscanLineBILD[j] = pscanLineGesuchtesBILD[0] then begin
//1. Pixel stimmt, also rest vergeleichen
for i := i to Bild.Height -1 do
begin
pscanLineBILD := Bild.Scanline[i];
for j := j to bild.Width -1 do
begin
b:= pscanLineBILD[j].rgbBlue;
r:= pscanLineBILD[j].rgbRed;
g:= pscanLineBILD[j].rgbGreen;
for i2 := 0 to gesuchtesBild.Height -1 do
begin
gesuchtesBild := gesuchtesBild.Scanline[i];
for j2 := 0 to gesuchtesBild.Width -1 do
begin
b:= pscanLinegesuchtesBild[j].rgbBlue;
r:= pscanLinegesuchtesBild[j].rgbRed;
g:= pscanLinegesuchtesBild[j].rgbGreen;
if pscanLineBILD[j] = pscanLineGesuchtesBILD[j] then abort; // Stimmt nicht mehr überein.... Daher Abbruch
if pscanLineGesuchtesBILD[j] = gesuchtesbild.width then showmessage('1. Zeile stimmt überein');
end;
end;
end;
end;
end;
end;
end;
end;