PixelGetColor von einem Bild

  • Hi,
    ich bins mal wieder :D .

    Also eigentlich ist die Frage unlogisch aber vlt geht es durch irgendwelche umwege ja doch ;) .

    Ich möchte wie bei PixelGetColor, die Farbe eines Pixels auslesen, jedoch nicht aus einem geöffneten Bild sondern von einem gespeicherten auf der Festplatte.

    Geht so etwas vlt mit ner dll oder mit GDI+?

    Wäre cool wenn mir jemand helfen könnte ;) .

    MfG

    Bladerunner

    Einmal editiert, zuletzt von Bladerunner85 (16. Juli 2010 um 11:54)

  • Die Farbe eines Pixels kannst du nur abfragen, wenn das Bild auch offen ist. Deswegen ist es ja ein Pixel ( nur auf dem Monitor vorhanden ). Allerdings habe ich aus gegebenem Anlass grade dieses Script hier offen - vielleicht bringt es dich ja weiter

    Spoiler anzeigen
    [autoit]

    #include <GUIConstants.au3>
    #include <EditConstants.au3>
    #include <WindowsConstants.au3>
    #include <Color.au3>
    #include <WinAPI.au3>

    [/autoit] [autoit][/autoit] [autoit]

    Global $threshold
    Global $image
    Global $width
    Global $height
    Global $pixels
    Global $pathString = "12345678"
    Global $scramble = False
    Global $rotate = 0
    Global $speed

    [/autoit] [autoit][/autoit] [autoit][/autoit] [autoit]

    ;; Check hotkeys ;;
    If (Not HotKeySet ("{F9}", "Nothing")) Then
    MsgBox (16, "Error", "Could not register the F9 hotkey.")
    Exit
    EndIf
    If (Not HotKeySet ("{F10}", "Nothing")) Then
    MsgBox (16, "Erro", "Could not register the F10 hotkey.")
    Exit
    EndIf

    [/autoit] [autoit][/autoit] [autoit][/autoit] [autoit]

    ;; Image dialog ;;
    $imageFile = FileOpenDialog ("Open image", "", "Images (*.jpg;*.jpeg;*.gif;*.png;*.bmp)", 1)
    If (@error) Then Exit

    [/autoit] [autoit][/autoit] [autoit][/autoit] [autoit]

    ;; Options dialog ;;
    $optGUI = GUICreate ("Settings", 160, 270, -1, -1, $WS_CAPTION, BitOr ($WS_EX_APPWINDOW, $WS_EX_TOOLWINDOW))
    GUICtrlCreateGroup ("Image processing", 5, 5, 150, 85)
    GUICtrlCreateLabel ("Sensitivity (0~255):", 10, 28, 110, 15)
    $thresholdInput = GUICtrlCreateInput ("100", 125, 25, 25, 20, $ES_NUMBER)
    GUICtrlCreateLabel ("Width (px):", 10, 48, 110, 15)
    $widthInput = GUICtrlCreateInput ("100", 125, 45, 25, 20, $ES_NUMBER)
    GUICtrlCreateLabel ("Height (px):", 10, 68, 110, 15)
    $heightInput = GUICtrlCreateInput ("100", 125, 65, 25, 20, $ES_NUMBER)
    GUICtrlCreateGroup ("Drawing pattern", 5, 95, 150, 140)
    $horizontalRadio = GUICtrlCreateRadio ("Horizontal", 10, 115, 110, 15)
    $verticalRadio = GUICtrlCreateRadio ("Vertical", 10, 135, 110, 15)
    $diagonalRadio = GUICtrlCreateRadio ("Diagonal", 10, 155, 110, 15)
    $rotateRadio = GUICtrlCreateRadio ("Spiral", 10, 175, 110, 15)
    $scrambleRadio = GUICtrlCreateRadio ("Random", 10, 195, 110, 15)
    GUICtrlSetState ($diagonalRadio, $GUI_CHECKED)
    GUICtrlCreateLabel ("Mouse speed (0~100):", 10, 213, 110, 15)
    $speedInput = GUICtrlCreateInput ("0", 125, 210, 25, 20, $ES_NUMBER)
    $okBtn = GUICtrlCreateButton ("Ok", 30, 245, 40, 20)
    $cancelBtn = GUICtrlCreateButton ("Cancel", 80, 245, 50, 20)
    GUISetState ()

    [/autoit] [autoit][/autoit] [autoit]

    While 1
    Switch (GUIGetMsg ())
    Case $GUI_EVENT_CLOSE
    Exit
    Case $cancelBtn
    Exit
    Case $okBtn
    $threshold = GUICtrlRead ($thresholdInput)
    $width = GUICtrlRead ($widthInput)
    $height = GUICtrlRead ($heightInput)
    $speed = GUICtrlRead ($speedInput)
    If (GUICtrlRead ($horizontalRadio) == $GUI_CHECKED) Then
    $pathString = "45273618"
    ElseIf (GUICtrlRead ($verticalRadio) == $GUI_CHECKED) Then
    $pathString = "27453618"
    ElseIf (GUICtrlRead ($diagonalRadio) == $GUI_CHECKED) Then
    $pathString = "36184527"
    ElseIf (GUICtrlRead ($rotateRadio) == $GUI_CHECKED) Then
    $pathString = "14678532"
    $rotate = 1
    ElseIf (GUICtrlRead ($scrambleRadio) == $GUI_CHECKED) Then
    $scramble = True
    EndIf

    [/autoit] [autoit][/autoit] [autoit]

    GUIDelete ($optGUI)
    ExitLoop
    EndSwitch
    WEnd

    [/autoit] [autoit][/autoit] [autoit][/autoit] [autoit]

    ;; Processing dialog ;;
    $GUI = GUICreate ("Processing image...", $width, $height + 20, -1, -1, $WS_CAPTION, BitOr ($WS_EX_APPWINDOW, $WS_EX_TOOLWINDOW))
    GUISetBkColor (0xffffff)
    $imageBox = GUICtrlCreatePic ($imageFile, 0, 0, $width, $height)
    $progress = GUICtrlCreateProgress (0, $height, $width, 20)
    GUISetState ()

    [/autoit] [autoit][/autoit] [autoit]

    ;; Get image pixels ;;
    $dc = _WinAPI_GetDC ($GUI)
    $memDc = _WinAPI_CreateCompatibleDC ($dc)
    $bitmap = _WinAPI_CreateCompatibleBitmap ($dc, $width, $height)
    _WinAPI_SelectObject ($memDc, $bitmap)
    _WinAPI_BitBlt ($memDc, 0, 0, $width, $height, $dc, 0, 0, $SRCCOPY)
    $bits = DllStructCreate ("dword[" & ($width * $height) & "]")
    DllCall ("gdi32", "int", "GetBitmapBits", "ptr", $bitmap, "int", ($width * $height * 4), "ptr", DllStructGetPtr ($bits))
    GUICtrlDelete ($imageBox)

    [/autoit] [autoit][/autoit] [autoit]

    ;; Process the pixels ;;
    Dim $pixels[$width][$height]
    For $y = 0 To ($height - 1)
    For $x = 0 To ($width - 1)
    $index = ($y * $width) + $x
    $color = DllStructGetData ($bits, 1, $index)

    [/autoit] [autoit][/autoit] [autoit]

    $red = _ColorGetBlue ($color)
    $green = _ColorGetGreen ($color)
    $blue = _ColorGetRed ($color)
    $shade = ($red + $green + $blue) / 3
    If ($shade > $threshold) Then
    $color = 0xffffff
    $pixels[$x][$y] = 0
    Else
    $color = 0
    $pixels[$x][$y] = 1
    EndIf

    [/autoit] [autoit][/autoit] [autoit]

    DllStructSetData ($bits, 1, $color, $index)
    Next

    [/autoit] [autoit][/autoit] [autoit]

    DllCall ("gdi32", "int", "SetBitmapBits", "ptr", $bitmap, "int", ($width * $height * 4), "ptr", DllStructGetPtr ($bits))
    _WinAPI_BitBlt ($dc, 0, 0, $width, $height, $memDc, 0, 0, $SRCCOPY)
    GUICtrlSetData ($progress, ($y * 100) / $height)
    Next

    [/autoit] [autoit][/autoit] [autoit]

    _WinAPI_ReleaseDC ($GUI, $dc)
    GUIRegisterMsg ($WM_PAINT, "OnPaint")

    [/autoit] [autoit][/autoit] [autoit][/autoit] [autoit]

    ;; Ready to draw ;;
    TrayTip ("Pronto!", "Press F9 para draw. You can press F10 anytime to exit.", 10)
    HotKeySet ("{F9}", "Draw")
    HotKeySet ("{F10}", "Quit")

    [/autoit] [autoit][/autoit] [autoit]

    While 1
    Sleep (60000)
    WEnd

    [/autoit] [autoit][/autoit] [autoit][/autoit] [autoit]

    Func OnPaint ($hwndGUI, $msgID, $wParam, $lParam)
    Local $paintStruct = DllStructCreate ("hwnd hdc;int fErase;dword rcPaint[4];int fRestore;int fIncUpdate;byte rgbReserved[32]")

    [/autoit] [autoit][/autoit] [autoit]

    $dc = DllCall ("user32", "hwnd", "BeginPaint", "hwnd", $hwndGUI, "ptr", DllStructGetPtr ($paintStruct))
    $dc = $dc[0]

    [/autoit] [autoit][/autoit] [autoit]

    _WinAPI_BitBlt ($dc, 0, 0, $width, $height, $memDc, 0, 0, $SRCCOPY)

    [/autoit] [autoit][/autoit] [autoit]

    DllCall ("user32", "hwnd", "EndPaint", "hwnd", $hwndGUI, "ptr", DllStructGetPtr ($paintStruct))
    Return $GUI_RUNDEFMSG
    EndFunc

    [/autoit] [autoit][/autoit] [autoit][/autoit] [autoit]

    Func Draw ()
    $mouseCenter = MouseGetPos ()
    $x0 = $mouseCenter[0] - ($width / 2)
    $y0 = $mouseCenter[1] - ($height / 2)

    [/autoit] [autoit][/autoit] [autoit]

    ;; Move the mouse around the drawing perimeter ;;
    MouseMove ($x0, $y0)
    MouseMove ($x0 + $width, $y0)
    MouseMove ($x0 + $width, $y0 + $height)
    MouseMove ($x0, $y0 + $height)
    MouseMove ($x0, $y0)

    [/autoit] [autoit][/autoit] [autoit]

    ;; Draw all the areas ;;
    $stack = CreateStack (1000)
    For $y = 0 To ($height - 1)
    For $x = 0 To ($width - 1)
    If ($pixels[$x][$y] == 1) Then
    MouseMove ($x + $x0, $y + $y0, $speed)
    MouseDown ("primary")
    DrawArea ($stack, $x, $y, $x0, $y0)
    MouseUp ("primary")
    Else
    EndIf
    Next
    Next

    [/autoit] [autoit][/autoit] [autoit]

    ;; Reset the pixels statuses ;;
    For $y = 0 To ($height - 1) Step 1
    For $x = 0 To ($width - 1) Step 1
    If ($pixels[$x][$y] == 2) Then
    $pixels[$x][$y] = 1
    EndIf
    Next
    Next
    EndFunc

    [/autoit] [autoit][/autoit] [autoit][/autoit] [autoit]

    Func DrawArea (ByRef $stack, $x, $y, $x0, $y0)
    Local $path[8]
    Local $continue

    [/autoit] [autoit][/autoit] [autoit]

    $path = MakePath ($pathString)

    [/autoit] [autoit][/autoit] [autoit]

    While 1
    MouseMove ($x + $x0, $y + $y0, $speed)
    $pixels[$x][$y] = 2

    [/autoit] [autoit][/autoit] [autoit]

    If ($scramble) Then ScramblePath ($path)
    If ($rotate > 0) Then RotatePath ($path, $rotate)

    [/autoit] [autoit][/autoit] [autoit]

    ;;;;;;;;;;;;;;;;;;;
    ;; +---+---+---+ ;;
    ;; | 1 | 2 | 3 | ;;
    ;; +---+---+---+ ;;
    ;; | 4 | | 5 | ;;
    ;; +---+---+---+ ;;
    ;; | 6 | 7 | 8 | ;;
    ;; +---+---+---+ ;;
    ;;;;;;;;;;;;;;;;;;;

    [/autoit] [autoit][/autoit] [autoit]

    $continue = False
    For $i = 0 To 7
    Switch ($path[$i])
    Case 1
    If (($x > 0) And ($y > 0)) Then
    If ($pixels[$x - 1][$y - 1] == 1) Then
    Push ($stack, $x, $y)
    $x -= 1
    $y -= 1
    $continue = True
    ExitLoop
    EndIf
    EndIf

    [/autoit] [autoit][/autoit] [autoit]

    Case 2
    If ($y > 0) Then
    If ($pixels[$x][$y - 1] == 1) Then
    Push ($stack, $x, $y)
    $y -= 1
    $continue = True
    ExitLoop
    EndIf
    EndIf

    [/autoit] [autoit][/autoit] [autoit]

    Case 3
    If (($x > 0) And ($y < 0)) Then
    If ($pixels[$x + 1][$y - 1] == 1) Then
    Push ($stack, $x, $y)
    $x += 1
    $y -= 1
    $continue = True
    ExitLoop
    EndIf
    EndIf

    [/autoit] [autoit][/autoit] [autoit]

    Case 4
    If ($x > 0) Then
    If ($pixels[$x - 1][$y] == 1) Then
    Push ($stack, $x, $y)
    $x -= 1
    $continue = True
    ExitLoop
    EndIf
    EndIf

    [/autoit] [autoit][/autoit] [autoit]

    Case 5
    If ($x < ($width - 1)) Then
    If ($pixels[$x + 1][$y] == 1) Then
    Push ($stack, $x, $y)
    $x += 1
    $continue = True
    ExitLoop
    EndIf
    EndIf

    [/autoit] [autoit][/autoit] [autoit]

    Case 6
    If (($x < 0) And ($y > 0)) Then
    If ($pixels[$x - 1][$y + 1] == 1) Then
    Push ($stack, $x, $y)
    $x -= 1
    $y += 1
    $continue = True
    ExitLoop
    EndIf
    EndIf

    [/autoit] [autoit][/autoit] [autoit]

    Case 7
    If ($y < ($height - 1)) Then
    If ($pixels[$x][$y + 1] == 1) Then
    Push ($stack, $x, $y)
    $y += 1
    $continue = True
    ExitLoop
    EndIf
    EndIf

    [/autoit] [autoit][/autoit] [autoit]

    Case 8
    If (($x < ($width - 1)) And ($y < ($height - 1))) Then
    If ($pixels[$x + 1][$y + 1] == 1) Then
    Push ($stack, $x, $y)
    $x += 1
    $y += 1
    $continue = True
    ExitLoop
    EndIf
    EndIf
    EndSwitch
    Next
    If ($continue) Then ContinueLoop

    [/autoit] [autoit][/autoit] [autoit]

    If (Not Pop ($stack, $x, $y)) Then ExitLoop
    WEnd
    EndFunc

    [/autoit] [autoit][/autoit] [autoit][/autoit] [autoit][/autoit] [autoit]

    Func MakePath ($string)
    Return StringSplit ($string, "")
    EndFunc

    [/autoit] [autoit][/autoit] [autoit][/autoit] [autoit]

    Func ScramblePath (ByRef $path)
    Local $table = "12345678"
    Local $newPath[8]

    [/autoit] [autoit][/autoit] [autoit]

    For $i = 8 To 1 Step -1
    $next = StringMid ($table, Random (1, $i, 1), 1)
    $newPath[$i - 1] = Number ($next)
    $table = StringReplace ($table, $next, "")
    Next

    [/autoit] [autoit][/autoit] [autoit]

    $path = $newPath
    EndFunc

    [/autoit] [autoit][/autoit] [autoit][/autoit] [autoit]

    Func RotatePath (Byref $path, $places)
    If ($places == 0) Then
    Return $path
    Else
    For $i = 1 To Abs ($places)
    $temp = $path[7]
    $path[7] = $path[6]
    $path[6] = $path[5]
    $path[5] = $path[4]
    $path[4] = $path[3]
    $path[3] = $path[2]
    $path[2] = $path[1]
    $path[1] = $path[0]
    $path[0] = $temp
    Next
    EndIf
    EndFunc

    [/autoit] [autoit][/autoit] [autoit][/autoit] [autoit][/autoit] [autoit]

    Func CreateStack ($size)
    Dim $stack[$size + 1][2]
    $stack[0][0] = 0
    $stack[0][1] = $size
    Return $stack
    EndFunc

    [/autoit] [autoit][/autoit] [autoit][/autoit] [autoit]

    Func Push (ByRef $stack, $x, $y)
    $stack[0][0] += 1
    If ($stack[0][0] > $stack[0][1]) Then
    $stack[0][1] += 1000
    ReDim $stack[$stack[0][1] + 1][2]
    EndIf

    [/autoit] [autoit][/autoit] [autoit]

    $stack[$stack[0][0]][0] = $x
    $stack[$stack[0][0]][1] = $y
    EndFunc

    [/autoit] [autoit][/autoit] [autoit][/autoit] [autoit]

    Func Pop (ByRef $stack, ByRef $x, ByRef $y)
    If ($stack[0][0] < 1) Then
    Return False
    EndIf

    [/autoit] [autoit][/autoit] [autoit]

    $x = $stack[$stack[0][0]][0]
    $y = $stack[$stack[0][0]][1]

    [/autoit] [autoit][/autoit] [autoit]

    $stack[0][0] -= 1
    Return True
    EndFunc

    [/autoit] [autoit][/autoit] [autoit][/autoit] [autoit]

    Func Nothing ()
    EndFunc

    [/autoit] [autoit][/autoit] [autoit]

    Func Quit ()
    MouseUp ("primary")
    Exit
    EndFunc

    [/autoit]
  • Schon mal danke für deine Antwort ;) .

    Hatte ich mir schon gedacht^^.

    Bin grad dabei mich durch dein Script durchzuarbeiten.
    Da ich mich noch nicht so gut mit AutoIt auskennne, wirds bestimmt noch nen Weilchen dauern :D .

    Hab durch die SuFu folgenden Thread gefunden:

    https://autoit.de/Pixelgetcolor%…em%20Fenster%20

    Hab mir den Thread durchgelesen aber ich weis jetzt nicht obs geht oder net.
    Und was ist bei der Func _GDIPlus_GetPixel anders als bei PixelGetColor?

    MfG

    Bladerunner

  • Also sehr einfach geht es so....

    Spoiler anzeigen
    [autoit]

    #include <Array.au3>
    #include <GDIPlusConstants.au3>
    #include <WinAPI.au3>
    #include <GDIPlus.au3>
    ;"\pic2.jpg"
    ;"\testfullscreen.bmp"
    $t = TimerInit()
    $color=_GetPixelFromBMP("pic2.jpg",100,100) ;Rückgabe: Farbe in BGR Input: file, umd die Koordinaten x und y
    ConsoleWrite('@@ Debug(' & @ScriptLineNumber & ') : $color = ' & $color & @crlf & '>Error code: ' & @error & @crlf) ;### Debug Console
    $m = TimerDiff($t)
    ConsoleWrite('@@ Debug(' & @ScriptLineNumber & ') : time = ' & $m & @CRLF & '>Error code: ' & @error & @CRLF) ;### Debug Console

    [/autoit] [autoit][/autoit] [autoit]

    Func _GetPixelFromBMP($sImage,$x,$y )
    Local $pbitmap, $Bmp
    Local $tBD, $iWidth, $iHeight, $iStride
    Local $pData, $color

    [/autoit] [autoit][/autoit] [autoit]

    _GDIPlus_Startup()
    $pbitmap = _GDIPlus_ImageLoadFromFile($sImage) ;bild laden
    If @error Then Return SetError(1, 2, 0)
    $tBD = _GDIPlus_BitmapLockBits($pbitmap, 0, 0, _GDIPlus_ImageGetWidth($pBitmap), _GDIPlus_ImageGetHeight($pBitmap), $GDIP_ILMREAD, $GDIP_PXF24RGB)
    If @error Then MsgBox(0, "", "Error locking region " & @error)
    $iWidth = DllStructGetData($tBD, 1) ;breite der bitmap
    $iHeight = DllStructGetData($tBD, 2) ;hoehe der bitmap
    $iStride = DllStructGetData($tBD, 3) ;Erklärung : http://www.autoitscript.com/forum/index.ph…ndpost&p=753169
    $pData = DllStructGetData($tBD, 5) ;pointer auf die bitmapdaten
    $Bmp = DllStructCreate("byte[" & $iStride * $iHeight & "]", $pData) ;struct gefüllt mit den Daten der Bitmap

    [/autoit] [autoit][/autoit] [autoit]

    $position = $istride * ($y - 1) + 3 * ($x-1) ;Umrechnung der Position von x- und y- Koordinaten
    $substruct = DllStructCreate("ubyte[3]", DllStructGetPtr($Bmp) + $position) ;eine 3-byte struct an die position vom pixel schreiben
    $Color = DllStructgetData($substruct, 1) ;Daten aus der struct lesen

    [/autoit] [autoit][/autoit] [autoit]

    _GDIPlus_BitmapUnlockBits($pbitmap, $tBD)
    ;_WinAPI_DeleteObject($hBmp)
    _GDIPlus_ImageDispose($pbitmap)
    _GDIPlus_Shutdown()
    return $color
    EndFunc ;==>_GetImagePixels

    [/autoit] [autoit][/autoit] [autoit][/autoit]

    für weiter Fragen nach dem Erstellen/Bearbeiten einer Bitmap verweise ich auf die Threads HIER und insbesondere HIER

    ciao
    Andy


    "Schlechtes Benehmen halten die Leute doch nur deswegen für eine Art Vorrecht, weil keiner ihnen aufs Maul haut." Klaus Kinski
    "Hint: Write comments after each line. So you can (better) see what your program does and what it not does. And we can see what you're thinking what your program does and we can point to the missunderstandings." A-Jay

    Wie man Fragen richtig stellt... Tutorial: Wie man Script-Fehler findet und beseitigt...X-Y-Problem

    Einmal editiert, zuletzt von Andy (15. Dezember 2009 um 21:58)

  • Zitat

    Die Farbe eines Pixels kannst du nur abfragen, wenn das Bild auch offen ist

    Ich weiß worauf du hinaus willst ;) , aber das war keine Frage nach einem Pixel in einem "versteckten oder hidden" Fenster.
    Selbstverständlich kann man alle Pixel aus einer Bilddatei lesen und auch schreiben...

  • Danke für eure Antworten ;) .

    In dem Post indem ich oben verlinkt habe, habe ich folgende Func gefunden:

    [autoit]


    Func _GDIPlus_GetPixel($hBitmap,$X,$Y)
    ; Prog@ndy
    Local $result = DllCall($ghGDIPDLL, "int", "GdipBitmapGetPixel", "ptr", $hBitmap, "int", $X, "int", $Y, "dword*", 0)
    If @error Then Return SetError(1,0,0)
    Return SetError($result[0],1,$result[4])
    EndFunc

    [/autoit]

    Kann das auch funktionieren?
    Wenn ja wie?

    MfG

    Bladerunner

  • Ich weiß worauf du hinaus willst ;) , aber das war keine Frage nach einem Pixel in einem "versteckten oder hidden" Fenster.
    Selbstverständlich kann man alle Pixel aus einer Bilddatei lesen und auch schreiben...

    Das weiß ich dank eurer Hilfe in meinem Monochromzeichnen Thread jetzt auch :thumbup:
    Man lernt halt nie aus ;)

  • Hi,
    hab die Func mal mit GUICtrlCreatePic und mit _GDIPlus_ImageLoadFromFile versucht.

    Hier mal der Code mit GUICtrlCreatePic:

    [autoit]


    #include <GUIConstantsEx.au3>
    #include <WindowsConstants.au3>
    #include <GDIPlus.au3>
    #include <WinAPI.au3>
    #include <StaticConstants.au3>

    [/autoit][autoit][/autoit][autoit]

    Opt("PixelCoordMode",0)
    HotKeySet("{f9}", "_SearchPic")

    [/autoit][autoit][/autoit][autoit]

    $Bild = GUICtrlCreatePic("pic.jpg",150,30)

    [/autoit][autoit][/autoit][autoit][/autoit][autoit]

    While 1
    WEnd

    [/autoit][autoit][/autoit][autoit]

    Func _SearchPic()
    $color = _GDIPlus_GetPixel($Bild, 10, 42)
    MsgBox(64,"Pixel Found!", Hex($color,6))
    EndFunc

    [/autoit][autoit][/autoit][autoit]

    Func _GDIPlus_GetPixel($hBitmap,$X,$Y)
    ; Prog@ndy
    Local $result = DllCall($ghGDIPDLL, "int", "GdipBitmapGetPixel", "ptr", $hBitmap, "int", $X, "int", $Y, "dword*", 0)
    If @error Then Return SetError(1,0,0)
    Return SetError($result[0],1,$result[4])
    EndFunc

    [/autoit][autoit][/autoit][autoit][/autoit]

    Und hier der mit _GDIPlus_ImageLoadFromFile:

    [autoit]


    #include <GUIConstantsEx.au3>
    #include <WindowsConstants.au3>
    #include <GDIPlus.au3>
    #include <WinAPI.au3>
    #include <StaticConstants.au3>

    [/autoit][autoit][/autoit][autoit]

    Opt("PixelCoordMode",0)
    HotKeySet("{f9}", "_SearchPic")

    [/autoit][autoit][/autoit][autoit][/autoit][autoit][/autoit][autoit]

    _GDIPlus_Startup()
    $Bild = _GDIPlus_ImageLoadFromFile("pic.jpg")

    [/autoit][autoit][/autoit][autoit]

    While 1
    WEnd

    [/autoit][autoit][/autoit][autoit]

    Func _SearchPic()
    $color = _GDIPlus_GetPixel($Bild, 10, 42)
    MsgBox(64,"Pixel Found!", $color)
    EndFunc

    [/autoit][autoit][/autoit][autoit]

    Func _GDIPlus_GetPixel($hBitmap,$X,$Y)
    ; Prog@ndy
    Local $result = DllCall($ghGDIPDLL, "int", "GdipBitmapGetPixel", "ptr", $hBitmap, "int", $X, "int", $Y, "dword*", 0)
    If @error Then Return SetError(1,0,0)
    Return SetError($result[0],1,$result[4])
    EndFunc

    [/autoit]

    Der mit GUICtrlCreatePic funktioniert.

    Bei _GDIPlus_ImageLoadFromFile bekomm ich nur irgendwelche komischen Zahlen raus.

    Kann mir einer sagen warum das so ist?

    Auch wenn das mit CreatePic funktioniert würde ich es lieber mit GDi+ machen da dann kein Bild im Hintergrund geöffnet werden muss.

    PS: Der Code von Andy funktioniert, wollte jedoch auch diese Func mal testen ;) .

    MfG

    Bladerunner