#include #include #include #include #include #include #include Opt('MustDeclareVars', 1) Local $hBitmap, $hImage, $sImageType, $iX, $iY, $iXc, $iYc, $iMemo, $iPixelColor, $count, $File, $color1, $oForm, $color, $dc, $setpixel, $realesedc Local $hGraphic, $hBitmap, $hBackbuffer, $save, $hPen, $hWind, $cPix, $line, $split, $split0, $split12, $split17, $split1, $split2, $split3, $fRand Local $midY[1] Local $midX[1] Local $found[1] $File = FileOpen(@ScriptDir & "\coords.txt", 2) $fRand = FileOpen(@ScriptDir & "\cRand.txt", 2) _Main() Func _Main() _GDIPlus_Startup() $hImage = _GDIPlus_ImageLoadFromFile(@ScriptDir & '\Picaa.jpg') $sImageType = _GDIPlus_EncodersGetCLSID("JPG") $iX = _GDIPlus_ImageGetWidth($hImage) $iY = _GDIPlus_ImageGetHeight($hImage) Local $aCoords[$iX][$iY] $oForm = GUICreate("GDI+", ($iX), ($iY)) GUISetBkColor(0xFFFFFF) GUISetState() $hWind = WinGetHandle($oForm) $hGraphic = _GDIPlus_GraphicsCreateFromHWND($hWind) $hBitmap = _GDIPlus_BitmapCreateFromGraphics($iX, $iY, $hGraphic) $hBackbuffer = _GDIPlus_ImageGetGraphicsContext($hBitmap) _GDIPlus_GraphicsClear($hBackbuffer, 0xFFFFFFFF) For $iXc = 0 To $iX - 1 For $iYc = 0 To $iY - 1 $iPixelColor = Hex(_GDIPlus_GetPixel($hImage, $iXc, $iYc), 6) If Dec($iPixelColor) < Dec('999999') Then ;$count = $count + 1 ;FileWrite($File, $iXc & "," & $iYc & @CRLF) $aCoords[$iXc][$iYc] = 999999 SetPixel($oForm, $iXc, $iYc, $color) $hPen = _GDIPlus_PenCreate(0xFF000000); _GDIPlus_GraphicsDrawLine($hBackbuffer, $iXc, $iYc, $iXc + 1, $iYc + 1, $hPen) _GDIPlus_GraphicsDrawLine($hGraphic, $iXc, $iYc, $iXc + 1, $iYc + 1, $hPen) Else $aCoords[$iXc][$iYc] = 0 EndIf Next Next ;$save = _GDIPlus_ImageSaveToFile($hBitmap, @ScriptDir & '\Image1.jpg') Do Until GUIGetMsg() = $GUI_EVENT_CLOSE ;FileClose($File) _GDIPlus_Shutdown() _ArrayDisplay($aCoords, Default, Default, 1) For $iXc = 0 To $iX - 1 For $iYc = 0 To $iY - 1 If $aCoords[$iXc][$iYc] = 999999 Then If $aCoords[$iXc - 1][$iYc] = 0 Or $aCoords[$iXc + 1][$iYc] = 0 Or $aCoords[$iXc][$iYc - 1] = 0 Or $aCoords[$iXc][$iYc + 1] = 0 Then $aCoords[$iXc][$iYc] = 777777 FileWrite($fRand, $iXc & "," & $iYc & @CRLF) EndIf EndIf Next Next FileClose($fRand) _ArrayDisplay($aCoords, Default, Default, 1) For $iXc = 0 To $iX - 1 For $iYc = 0 To $iY - 1 If $aCoords[$iXc][$iYc] = 777777 And $count = 0 Then $split17 = StringSplit($aCoords[$iXc][$iYc], ',', 1) $count = $count + 1 For $iYc2 = $iYc To $iY If $aCoords[$iXc][$iYc2] = 0 Then $split0 = StringSplit($aCoords[$iXc][$iYc2], ',', 1) $split1 = StringSplit($aCoords[$iXc][$iYc + 1], ',', 1) $split2 = StringSplit($aCoords[$iXc][$iYc2 - 1], ',', 1) $split3 = StringSplit($aCoords[$iXc][$iYc2 - 2], ',', 1) If $split17[1] <> $split2[1] Then $aCoords[$iXc][$iYc] = 0 $aCoords[$iXc][$iYc + 1] = 777777 $aCoords[$iXc][$iYc2 - 1] = 0 If $split3[1] = $split17[1] Then $aCoords[$iXc][$iYc2 - 2] = 777777 $iYc = $iYc2 ExitLoop EndIf EndIf EndIf Next EndIf $count = 0 Next Next For $iYc = 0 To $iY - 1 For $iXc = 0 To $iX - 1 If $aCoords[$iXc][$iYc] = 999999 Then ; If $aCoords[$iXc][$iYc] = 777777 And $count = 0 Then $count = $count + 1 $split17 = StringSplit($aCoords[$iXc][$iYc], ',', 1) For $iXc2 = $iXc To $iX If $aCoords[$iXc2][$iYc] = 0 Then $split0 = StringSplit($aCoords[$iXc2][$iYc], ',', 1) $split1 = StringSplit($aCoords[$iXc + 1][$iYc], ',', 1) $split2 = StringSplit($aCoords[$iXc2 - 1][$iYc], ',', 1) $split3 = StringSplit($aCoords[$iXc2 - 2][$iYc], ',', 1) If $split17[1] <> $split2[1] Then $aCoords[$iXc][$iYc] = 0 $aCoords[$iXc + 1][$iYc] = 777777 $aCoords[$iXc2 - 1][$iYc] = 0 If $split3[1] = $split17[1] Then $aCoords[$iXc2 - 2][$iYc] = 777777 $iXc = $iXc2 ExitLoop EndIf $iXc = $iXc2 ExitLoop EndIf EndIf Next EndIf EndIf $count = 0 Next Next _ArrayDisplay($aCoords, Default, Default, 1) For $iXc = 0 To $iX - 1 For $iYc = 0 To $iY - 1 If $aCoords[$iXc][$iYc] = 777777 Then For $iYc2 = $iYc To $iY - 1 If $aCoords[$iXc][$iYc2] = 0 Then If $aCoords[$iXc][$iYc + Ceiling(Round(($iYc2 - $iYc) / 2) - 1)] = 777777 Then $aCoords[$iXc][$iYc + Ceiling(Round(($iYc2 - $iYc) / 2) - 1)] = 777777 $iYc = $iYc2 ExitLoop Else $aCoords[$iXc][$iYc + Ceiling(Round(($iYc2 - $iYc) / 2) - 1)] = 111111 ; eher rechts ausgerichtet $iYc = $iYc2 ExitLoop EndIf EndIf Next EndIf Next Next For $iYc = 0 To $iY - 1 For $iXc = 0 To $iX - 1 If $aCoords[$iXc][$iYc] = 777777 Then For $iXc2 = $iXc To $iX - 1 If $aCoords[$iXc2][$iYc] = 0 Then If $aCoords[($iXc - 1) + Ceiling(Round(($iXc2 - $iXc) / 2))][$iYc] = 777777 Then $aCoords[($iXc - 1) + Ceiling(Round(($iXc2 - $iXc) / 2))][$iYc] = 777777 $iXc = $iXc2 ExitLoop Else $aCoords[($iXc - 1) + Ceiling(Round(($iXc2 - $iXc) / 2))][$iYc] = 222222 ; eher rechts ausgerichtet $iXc = $iXc2 ExitLoop EndIf EndIf Next EndIf Next Next _ArrayDisplay($aCoords, Default, Default, 1) For $iXc = 0 To $iX - 1 For $iYc = 0 To $iY - 1 If $aCoords[$iXc][$iYc] = 777777 Or $aCoords[$iXc][$iYc] = 999999 Then $aCoords[$iXc][$iYc] = 0 Else ;$aCoords[$iXc][$iYc] = 888888 EndIf Next Next For $iXc = 0 To $iX - 1 For $iYc = 0 To $iY - 1 If $aCoords[$iXc][$iYc] = 111111 Then For $iYc2 = $iYc To $iY - 1 If $aCoords[$iXc][$iYc2] = 0 Then $aCoords[$iXc][$iYc + Ceiling(Round(($iYc2 - $iYc) / 2))] = 111111 $iYc = $iYc2 ExitLoop ElseIf $aCoords[$iXc][$iYc2] = 111111 Then $aCoords[$iXc][$iYc2] = 0 EndIf Next EndIf Next Next For $iYc = 0 To $iY - 1 For $iXc = 0 To $iX - 1 If $aCoords[$iXc][$iYc] = 111111 Then For $iXc2 = $iXc To $iX - 1 If $aCoords[$iXc2][$iYc] = 0 Then $aCoords[$iXc + Ceiling(Round(($iXc2 - $iXc) / 2))][$iYc] = 111111 $iXc = $iXc2 ExitLoop ElseIf $aCoords[$iXc2][$iYc] = 111111 Then $aCoords[$iXc2][$iYc] = 0 EndIf Next EndIf Next Next _ArrayDisplay($aCoords, Default, Default, 1) For $iXc = 0 To $iX - 1 For $iYc = 0 To $iY - 1 If $aCoords[$iXc][$iYc] = 111111 Then FileWrite($File, $iXc & "," & $iYc & @CRLF) EndIf Next Next Dim $aRec If Not _FileReadToArray(@ScriptDir & "\cRand.txt", $aRec) Then MsgBox(4096, "Fehler", "Fehler beim Einlesen der Datei in das Array!" & @CRLF & "Fehlercode: " & @error) Exit EndIf For $x = 1 To $aRec[0] $split = StringSplit($aRec[$x], ',', 1) $aCoords[$split[1]][$split[2]] = 999999 ;MsgBox(0, 'Datensatz ' & $x & ':', $aRec[$x]) Next _ArrayDisplay($aCoords, Default, Default, 1) FileClose($File) EndFunc ;==>_Main ; Gibt eine Zeile im Memo-Fenster aus Func MemoWrite($sMessage = '') GUICtrlSetData($iMemo, $sMessage & @CRLF, 1) EndFunc ;==>MemoWrite ; _GDIPlus_GetPixel Func _GDIPlus_GetPixel($hBitmap, $x, $Y) 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 ;==>_GDIPlus_GetPixel ;SetPixel Func SetPixel($oForm, $x, $Y, $color) $dc = DllCall("user32.dll", "int", "GetDC", "hwnd", $oForm) $setpixel = DllCall("gdi32.dll", "long", "SetPixel", "long", $dc[0], "long", $x, "long", $Y, "long", $color) $realesedc = DllCall("user32.dll", "int", "ReleaseDC", "hwnd", 0, "int", $dc[0]) EndFunc ;==>SetPixel