Code Optimierung -> GetPixel_ ?

Anfängerfragen zum Programmieren mit PureBasic.
K.Putt
Beiträge: 122
Registriert: 01.09.2006 00:17

Code Optimierung -> GetPixel_ ?

Beitrag 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...
PB 5.x & Win 7 64Bit
Benutzeravatar
edel
Beiträge: 3667
Registriert: 28.07.2005 12:39
Computerausstattung: GameBoy
Kontaktdaten:

Beitrag von edel »

Versuch es mal mit GetDIBits_ .
K.Putt
Beiträge: 122
Registriert: 01.09.2006 00:17

Beitrag 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") 
PB 5.x & Win 7 64Bit
Friedhelm
Beiträge: 43
Registriert: 29.08.2004 08:50

Beitrag von Friedhelm »

mfg
Friedhelm
Antworten