![]() |
Mit Scanline einen bestimmten Bereich auslesen
hi,
ich möchte mit Scanline einen bestimmten bereich eines bildes auslesen und auswerten über die suche bin ich leider nich fündig geworden diesen code habe ich aus der DP
Delphi-Quellcode:
wenn ich mit Scanline nun scanne dann liest er das ganze bild ein und beim auswerten
procedure TForm1.Scan(h: HWND);
var BitMap : TBitMap; P: PRGBQuad; y, x: integer; begin BitMap := TBitMap.create; try BitMap.LoadFromFile('maple.bmp'); BitMap.PixelFormat:= pf32Bit; for y := 310 to 420 do begin P := BitMap.ScanLine[y]; for x := 348 to 372 do //360 begin If ( P^.rgbRed = 173 ) And ( P^.rgbGreen = 33 ) And ( P^.rgbBlue = 0 ) Then Begin if x<=365 then sendkeys('left,Y',true); if x>365 then sendkeys('right,Y',true); End; If ( P^.rgbRed = 0 ) And ( P^.rgbGreen = 85 ) And ( P^.rgbBlue = 173 ) Then Begin if x<=365 then sendkeys('left,Y',true); if x>365 then sendkeys('right,Y',true); End; Inc(P); end; end; finally BitMap.Free; end; end; gibt er mir falsche werte, er erkennt nur farbwerte am anfang des bildes ich möchte aber welche aus der mitte Danke für die hilfe |
Re: Mit Scanline einen bestimmten Bereich auslesen
Habs jetzt nicht durchgeschaut, bringt BitMap.PixelFormat:= pf24Bit eine besserung?
|
Re: Mit Scanline einen bestimmten Bereich auslesen
@turboPASCAL: Dann muss PRGBQuad aber auch durch PRGBTriple ersetzt werden. Es sollte aber beides funktionieren.
@Baal: Du hast zwar die Werte der for-Schleife angepasst, der Pointer zeigt aber immer noch auf das erste Pixel der Reihe.
Delphi-Quellcode:
for y := 310 to 420 do
begin P := BitMap.ScanLine[y]; // P^ = Erstes Pixel der Reihe y Inc(P, 348); // 349. Pixel for x := 348 to 372 do begin If ( P^.rgbRed = 173 ) And ( P^.rgbGreen = 33 ) And ( P^.rgbBlue = 0 ) Then Begin if x<=365 then sendkeys('left,Y',true); if x>365 then sendkeys('right,Y',true); End; [...] Inc(P); // Nächstes Pixel end; |
Re: Mit Scanline einen bestimmten Bereich auslesen
Zitat:
|
Re: Mit Scanline einen bestimmten Bereich auslesen
danke für den tip
leider klappt es noch nicht :? liest der jetz auch wirklich nur das viereck von (348;310) bis (372;420) aus oder das ganze bild? |
Re: Mit Scanline einen bestimmten Bereich auslesen
Zitat:
Was funktioniert denn nicht, die Steuerung ? |
Re: Mit Scanline einen bestimmten Bereich auslesen
entweder is das zu langsam oder eben es geht nicht?
|
Re: Mit Scanline einen bestimmten Bereich auslesen
Das wird wohl an der Sache mit dem sendkeys('left,Y',true); liegen.
Wenn du die Graphik scanst wird ja jeder Pixel in ein Key umgewandelt und gesendet... |
Alle Zeitangaben in WEZ +1. Es ist jetzt 13:38 Uhr. |
Powered by vBulletin® Copyright ©2000 - 2025, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2023 by Daniel R. Wolf, 2024-2025 by Thomas Breitkreuz