Seite 1 von 1

Code Optimierung -> GetPixel_ ?

Verfasst: 15.09.2006 05:06
von K.Putt
Hallo,
ich habe nun das kleine Tool fertig, es sucht in einem Bildschirmbereich nach bestimmten Farbwerten.

Leider ist die GetPixel_() Funktion ziemlich langsam, gibt es eine Möglichkeit, das zu optimieren ?

Hier mein Code :

Code: Alles auswählen

Titel.s= "Anwendung"
WindowID = FindWindow_(#Null, Titel.s)
dc= GetDC_(WindowID)
farbwert=1234567  ;Beispiel

wx=100 ; Beispiel linke obere ecke
wy=100 

range=200 ; Suchweite in Pixeln x und y - Quadratbereich

  While GetAsyncKeyState_(#VK_ESCAPE) <> -32767
    For i= 0 To range   
      If i=range
         Debug "runde" ;um die Geschwindigkeit einzuschätzen...zzzZZZ
      EndIf
      For k= 0 To range
        x=wx+i
        y=wy+k
        color = GetPixel_(GetDC_(WindowID), x, y) 
        If color=farbwert
          Debug "gefunden"
        EndIf              
      Next
    Next
  Wend
End
AMD XP2600+
Jeder Durchlauf hat mehrere Sekunden gedauert, einen kompletten
Screen von 1280*1024 wollte ich gar nicht wagen...

Verfasst: 15.09.2006 05:16
von edel
Versuch es mal mit GetDIBits_ .

Verfasst: 15.09.2006 17:10
von K.Putt
Ich hab es mal mit BitBlt_() probiert, ausm Codearchiv,
da ich selten den Gesamten Bildschirm untersuchen möchte.
leider weiss ich nicht, wie ich die RGB Werte zurück aus dem Image bekomme, möglichst noch vor dem Speichern des Bildes um Zeit zu sparen. Dazu natürlich immer x und y Coords.
16 Bit Farbtiefe würde vollkommen reichen...

Passenden Code habe ich fdafür leider nicht gefunden.

Thanx.


Code: Alles auswählen

   hImage = CreateImage(0,200,200)
   hdc    = StartDrawing(ImageOutput(0))
   DeskDC = GetDC_(GetDesktopWindow_())
      BitBlt_(hdc,0,0,200,200,DeskDC,100,100,#SRCCOPY)
   StopDrawing()
   ReleaseDC_(GetDesktopWindow_(),DeskDC)


SaveImage(0, "C:\DesktopScreenshot.bmp") 

Verfasst: 15.09.2006 19:09
von Friedhelm