Einzelnen Beitrag anzeigen

gee21

Registriert seit: 3. Jan 2013
199 Beiträge
 
Delphi 10.4 Sydney
 
#19

AW: Bild im Internet Explorer finden?

  Alt 28. Mai 2013, 20:11
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;
Robert
  Mit Zitat antworten Zitat