Code Optimierungsvorschläge

  • Hi Leute,

    hat jemand eine Idee, wie ich den Code beschleunigen kann. Ich dachte z.B. an ASM oder FreeBasic!
    Und zwar gibt es in der _WinAPI_GuiImageHole() Funktion eine Schleife, die relativ lange braucht, das Bild zu erstellen.

    Hier der Code: autoit.de/wcf/attachment/19752/

    Danke und Gruß,
    UEZ

    Auch am Arsch geht ein Weg vorbei...

    ¯\_(ツ)_/¯

  • Hi

    Hier der Ansatz via GDI+ Path:

    Spoiler anzeigen
    [autoit]

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

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

    Opt("GUIOnEventMode", 1)
    Opt("MustDeclareVars", 1)

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

    Global $fScale = 1

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

    Global $aPixelArray = _PixelCoordinate()

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

    Global $aSize = StringSplit($aPixelArray[0], ",", 2)
    Global $iWidth = $aSize[0] * $fScale
    Global $iHeight = $aSize[1] * $fScale

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

    Global $hGui = GUICreate("OSC", $iWidth, $iHeight)
    GUISetBkColor(0xC00000, $hGui)
    GUISetOnEvent($GUI_EVENT_CLOSE, "_Exit")

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

    _SetRegion($hGui, $aPixelArray, $fScale)
    GUISetState()

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

    While Sleep(20)
    WEnd

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

    Func _SetRegion($hWnd, $aPix, $fScale)
    Local $iCnt = UBound($aPix) - 1
    Local $tRect = DllStructCreate("float[" & $iCnt * 4 & "];")

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

    Local $aSplit, $iIdx
    For $i = 1 To $iCnt
    $iIdx = ($i - 1) * 4
    $aSplit = StringSplit($aPix[$i], ',')
    DllStructSetData($tRect, 1, $aSplit[1], $iIdx + 1)
    DllStructSetData($tRect, 1, $aSplit[2], $iIdx + 2)
    DllStructSetData($tRect, 1, 1, $iIdx + 3)
    DllStructSetData($tRect, 1, 1, $iIdx + 4)
    Next

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

    _GDIPlus_Startup()

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

    Local $aResult = DllCall($ghGDIPDll, "uint", "GdipCreatePath", "int", 0, "int*", 0)
    Local $hPath = $aResult[2]

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

    DllCall($ghGDIPDll, "uint", "GdipAddPathRectangles", "hwnd", $hPath, "ptr", DllStructGetPtr($tRect), "int", $iCnt)

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

    Local $hMatrix = _GDIPlus_MatrixCreate()
    _GDIPlus_MatrixScale($hMatrix, $fScale, $fScale)
    _GDIPlus_MatrixTranslate($hMatrix, _WinAPI_GetSystemMetrics(7), _WinAPI_GetSystemMetrics(8) + _WinAPI_GetSystemMetrics($SM_CYSIZE) + 1)
    DllCall($ghGDIPDll, "uint", "GdipTransformPath", "hwnd", $hPath, "hwnd", $hMatrix)
    _GDIPlus_MatrixDispose($hMatrix)

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

    $aResult = DllCall($ghGDIPDll, "uint", "GdipCreateRegionPath", "hwnd", $hPath, "int*", 0)
    Local $hRegion = $aResult[2]
    DllCall($ghGDIPDll, "uint", "GdipDeletePath", "hwnd", $hPath)

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

    Local $aSize = WinGetPos(HWnd($hWnd))
    $tRect = _GDIPlus_RectFCreate(0, 0, $aSize[2], $aSize[3])
    $aResult = DllCall($ghGDIPDll, "uint", "GdipCreateRegionRect", "ptr", DllStructGetPtr($tRect), "int*", 0)
    Local $hRegion_1 = $aResult[2]

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

    Local $aClient = WinGetClientSize(HWnd($hWnd))
    $tRect = _GDIPlus_RectFCreate(0, 0, $aClient[0], $aClient[1])

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

    Local $tPnt = DllStructCreate("int X; int Y;")
    _WinAPI_ClientToScreen($hWnd, $tPnt)
    DllStructSetData($tRect, 1, DllStructGetData($tPnt, "X") - $aSize[0])
    DllStructSetData($tRect, 2, DllStructGetData($tPnt, "Y") - $aSize[1])

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

    DllCall($ghGDIPDll, "uint", "GdipCombineRegionRect", "hwnd", $hRegion_1, "ptr", DllStructGetPtr($tRect), "int", 3)

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

    DllCall($ghGDIPDll, "uint", "GdipCombineRegionRegion", "hwnd", $hRegion, "hwnd", $hRegion_1, "int", 2)
    DllCall($ghGDIPDll, "uint", "GdipDeleteRegion", "hwnd", $hRegion_1)

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

    Local $hGraphics = _GDIPlus_GraphicsCreateFromHWND($hWnd)
    $aResult = DllCall($ghGDIPDll, "uint", "GdipGetRegionHRgn", "hwnd", $hRegion, "hwnd", $hGraphics, "int*", 0)
    Local $hRgn = $aResult[3]
    DllCall($ghGDIPDll, "uint", "GdipDeleteRegion", "hwnd", $hRegion)

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

    DllCall('user32.dll', 'long', 'SetWindowRgn', 'hwnd', $hWnd, 'long', $hRgn, 'int', 1)
    _WinAPI_DeleteObject($hRegion)

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

    _GDIPlus_GraphicsDispose($hGraphics)
    _GDIPlus_Shutdown()
    EndFunc ;==>_SetRegion

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

    Func _Exit()
    Exit
    EndFunc ;==>_Exit

    [/autoit]


    Du kannst auch die in dieser Funktion erstellte Region mit GdipGetRegionData auslesen und als Binary im Script mitgeben und via GdipCreateRegionRgnData erstellen.
    Dann ersparst du dir schonmal die Schleife.
    Mit GdipTransformRegion kann diese Region immer noch skaliert werden...

    lgE

  • Hmm, da bringst du mich auf eine Idee. Ist es möglich ein 1bit Bild mit GDI+ und den Pathes schneller auszulesen und in der GUI darzustellen anstelle des Arrays?

    Gruß,
    UEZ

    Auch am Arsch geht ein Weg vorbei...

    ¯\_(ツ)_/¯

  • Hast du das Bild zur Hand?
    Dann werd ich das mal ausprobieren...


    Dies wäre die Methode via vorher berechneter Region:

    Region Berechnen:

    Spoiler anzeigen
    [autoit]

    #include <GDIPlus.au3>
    #include <TestArray.au3>

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

    Opt("GUIOnEventMode", 1)
    Opt("MustDeclareVars", 1)

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

    Global $aPixelArray = _PixelCoordinate()
    Global $bRegion = _CreateRegionData($aPixelArray)

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

    Global $sOut = "Global $bRegion = "
    Global $iLen = 4096 - 26
    While StringLen($bRegion) > 1
    $sOut &= '"' & StringLeft($bRegion, $iLen) & '"'
    $bRegion = StringTrimLeft($bRegion, $iLen)
    If StringLen($bRegion) > 1 Then $sOut &= ' & _' & @CRLF & @TAB & @TAB
    $iLen = 4096 - 16
    WEnd

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

    ConsoleWrite($sOut & @CRLF)
    ClipPut($sOut)

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

    Func _CreateRegionData($aPix)
    Local $iCnt = UBound($aPix) - 1
    Local $tRects = DllStructCreate("float[" & $iCnt * 4 & "];")

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

    Local $aSplit, $iIdx
    For $i = 1 To $iCnt
    $iIdx = ($i - 1) * 4
    $aSplit = StringSplit($aPix[$i], ',')
    DllStructSetData($tRects, 1, $aSplit[1], $iIdx + 1)
    DllStructSetData($tRects, 1, $aSplit[2], $iIdx + 2)
    DllStructSetData($tRects, 1, 1, $iIdx + 3)
    DllStructSetData($tRects, 1, 1, $iIdx + 4)
    Next

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

    _GDIPlus_Startup()

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

    Local $aResult = DllCall($ghGDIPDll, "uint", "GdipCreatePath", "int", 0, "int*", 0)
    Local $hPath = $aResult[2]

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

    DllCall($ghGDIPDll, "uint", "GdipAddPathRectangles", "hwnd", $hPath, "ptr", DllStructGetPtr($tRects), "int", $iCnt)
    $aResult = DllCall($ghGDIPDll, "uint", "GdipGetPointCount", "hwnd", $hPath, "int*", 0)
    ;ConsoleWrite("! Path Pnt: " & $aResult[2] & @CRLF)

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

    $aResult = DllCall($ghGDIPDll, "uint", "GdipCreateRegionPath", "hwnd", $hPath, "int*", 0)
    Local $hRegion = $aResult[2]

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

    Local $hMatrix = _GDIPlus_MatrixCreate()
    $aResult = DllCall($ghGDIPDll, "uint", "GdipGetRegionScansCount", "hwnd", $hRegion, "uint*", 0, "hwnd", $hMatrix)
    Local $iScans = $aResult[2]

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

    $tRects = DllStructCreate("float[" & $iScans * 4 & "]")
    $aResult = DllCall($ghGDIPDll, "uint", "GdipGetRegionScans", "hwnd", $hRegion, "ptr", DllStructGetPtr($tRects), "int*", $iScans, "hwnd", $hMatrix)

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

    DllCall($ghGDIPDll, "uint", "GdipResetPath", "hwnd", $hPath)
    DllCall($ghGDIPDll, "uint", "GdipAddPathRectangles", "hwnd", $hPath, "ptr", DllStructGetPtr($tRects), "int", $iScans)
    $aResult = DllCall($ghGDIPDll, "uint", "GdipGetPointCount", "hwnd", $hPath, "int*", 0)
    ;ConsoleWrite("! Path Pnt: " & $aResult[2] & @CRLF)

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

    _GDIPlus_MatrixDispose($hMatrix)
    DllCall($ghGDIPDll, "uint", "GdipDeleteRegion", "hwnd", $hRegion)

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

    $aResult = DllCall($ghGDIPDll, "uint", "GdipCreateRegionPath", "hwnd", $hPath, "int*", 0)
    Local $hRegion = $aResult[2]
    DllCall($ghGDIPDll, "uint", "GdipDeletePath", "hwnd", $hPath)

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

    $aResult = DllCall($ghGDIPDll, "uint", "GdipGetRegionDataSize", "hwnd", $hRegion, "uint*", 0)
    Local $iData = $aResult[2]
    Local $tData = DllStructCreate("byte Data[" & $iData & "];")
    $aResult = DllCall($ghGDIPDll, "uint", "GdipGetRegionData", "hwnd", $hRegion, "ptr", DllStructGetPtr($tData), "int", $iData, "int*", 0)
    ;ConsoleWrite("! " & $iData & " " & $aResult[3] & @CRLF)

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

    DllCall($ghGDIPDll, "uint", "GdipDeleteRegion", "hwnd", $hRegion)
    _GDIPlus_Shutdown()

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

    Return DllStructGetData($tData, 1)
    EndFunc ;==>_CreateRegionData

    [/autoit]


    (Via GdipGetRegionScans kann man die Anzahl der Rechtecke erheblich verringern)


    Beispiel:

    Spoiler anzeigen
    [autoit]

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

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

    Opt("GUIOnEventMode", 1)
    Opt("MustDeclareVars", 1)

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

    Global $fScale = 1.4

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

    Global $bRegion = "0xB4530000621D9BED0110C0DB0000000001000010A45300000110C0DBB810000000400000C6000100DA000100DA000200C6000200C0000200DE000200DE000300C0000300BC000300E4000300E4000400BC000400B9000400E7000400E7000500B9000500B6000500EA000500EA000600B6000600B4000600EC000600EC000700B4000700B1000700EE000700EE000800B1000800AE000800F1000800F1000900AE000900AC000900F2000900F2000A00AC000A00AA000A00F4000A00F4000B00AA000B00A9000B00F5000B00F5000C00A9000C00A7000C00F6000C00F6000D00A7000D00A6000D00F8000D00F8000E00A6000E00A5000E00F9000E00F9000F00A5000F00A3000F00FA000F00FA001000A3001000A2001000FB001000FB001100A2001100A1001100FC001100FC001200A1001200A0001200FD001200FD001300A00013009F001300FD001300FD0014009F0014009E001400FE001400FE0015009E0015009D001500FF001500FF0016009D0016009C00160000011600000117009C0017009B00170000011700000118009B0018009A00180002011800020119009A001900990019000201190002011A0099001A0098001A0003011A0003011B0098001B0098001B0004011B0004011C0098001C0097001C0005011C0005011D0097001D0096001D0005011D0005011E0096001E0095001E0006011E0006011F0095001F0095001F0007011F00070120009500200094002000E8002000E800210094002100E90020000701200007012100E900210093002100E7002100E700220093002200E80021000801210008012200E800220092002200E7002200E700230092002300E80022000901220009012300E800230092002300090123000901240092002400910024000A0124000A01250091002500910025000B0125000B01260091002600900026000B0126000B0127009000270090002700D8002700D800280090002800D90027000C0127000C012800D90028008F0028000C0128000C0129008F0029008F0029000D0129000D012A008F002A008E002A000D012A000D012B008E002B008E002B000E012B000E012C008E002C008D002C000E012C000E012D008D002D008D002D000F012D000F012E008D002E008C002E000F012E000F012F008C002F008C002F0010012F00100131008C0031008B00310011013100110132008B0032008A00320011013200110133008A0033008A00330012013300120134008A0034008A003400D9003400D90035008A003500DB0034001201340012013500DB00350089003500D9003500D900360089003600DB0035001301350013013600DB00360089003600D9003600D900370089003700DC0036001301360013013700DC00370089003700D8003700D800380089003800DD0037001301370013013800DD00380088003800D8003800D800390088003900DD0038001401380014013900DD00390088003900BD003900BD003A0088003A00BE003900D8003900D8003A00BE003A00DD0039001401390014013A00DD003A0088003A00BC003A00BC003B0088003B00BF003A00D7003A00D7003B00BF003B00DD003A0015013A0015013B00DD003B0088003B00BC003B00BC003C0088003C00BF003B00D7003B00D7003C00BF003C00DE003B0015013B0015013C00DE003C0087003C00BC003C00BC003D0087003D00C0003C00D6003C00D6003D00C0003D00DE003C0015013C0015013D00DE003D0087003D00B7003D00B7003E0087003E00B9003D00BC003D00BC003E00B9003E00C0003D00D6003D00D6003E00C0003E00DE003D0016013D0016013E00DE003E0087003E00B6003E00B6003F0087003F00B9003E00BD003E00BD003F00B9003F00C0003E00D6003E00D6003F00C0003F00DF003E0016013E0016013F00DF003F0087003F00B6003F00B600400087004000BA003F00BD003F00BD004000BA004000C1003F00D5003F00D5004000C1004000E0003F0016013F0016014000E000400086004000B6004000B600410086004100BB004000BD004000BD004100BB004100C1004000D5004000D5004100C1004100E00040001701400017014100E000410086004100B6004100B600420086004200BC004100BE004100BE004200BC004200C2004100D5004100D5004200C2004200E00041001701410017014200E000420086004200B6004200B600430086004300BD004200BE004200BE004300BD004300C2004200D5004200D5004300C2004300E00042001701420017014300E000430086004300B6004300B600440086004400C3004300D5004300D5004400C3004400E00043001801430018014400E000440085004400B6004400B600450085004500C4004400D5004400D5004500C4004500E00044001801440018014500E000450085004500B6004500B600460085004600C4004500D4004500D4004600C4004600E00045001801450018014600E000460085004600B7004600B700470085004700C4004600D4004600D4004700C4004700E00046001801460018014700E000470085004700B7004700B700480085004800C5004700D4004700D4004800C5004800E00047001901470019014800E000480085004800B7004800B700490085004900C5004800D4004800D4004900C5004900DF0048001901480019014900DF00490084004900B8004900B8004A0084004A00C6004900D4004900D4004A00C6004A00DF0049001901490019014A00DF004A0084004A00B8004A00B8004B0084004B00C7004A00D4004A00D4004B00C7004B00DF004A0019014A0019014B00DF004B0084004B00BA004B00BA004C008400" & _
    "4C00C8004B00D3004B00D3004C00C8004C00DF004B0019014B0019014C00DF004C0084004C00BB004C00BB004D0084004D00C8004C00D2004C00D2004D00C8004D00DE004C001A014C001A014D00DE004D0084004D00BE004D00BE004E0084004E00C9004D00D2004D00D2004E00C9004E00DC004D00EB004D00EB004E00DC004E00EE004D001A014D001A014E00EE004E0084004E00BF004E00BF004F0084004F00CA004E00D2004E00D2004F00CA004F00DB004E00EC004E00EC004F00DB004F00EF004E00F0004E00F0004F00EF004F00F1004E001A014E001A014F00F1004F0084004F00C0004F00C000500084005000CA004F00D2004F00D2005000CA005000DA004F00E8004F00E8005000DA005000EB004F00EC004F00EC005000EB005000EF004F001A014F001A015000EF00500084005000AA005000AA00510084005100AC005000AF005000AF005100AC005100B0005000C1005000C1005100B0005100CB005000D1005000D1005100CB005100DA005000E8005000E8005100DA005100E9005000EA005000EA005100E9005100ED005000F3005000F3005100ED005100F40050001A0150001A015100F400510084005100A9005100A900520084005200AC005100AD005100AD005200AC005200AE005100B0005100B0005200AE005200B2005100C1005100C1005200B2005200CC005100D1005100D1005200CC005200D9005100EC005100EC005200D9005200ED005100F3005100F3005200ED005200F40051001A0151001A015200F400520084005200A8005200A800530084005300A9005200C2005200C2005300A9005300CE005200D1005200D1005300CE005300D8005200EC005200EC005300D8005300EE0052001B0152001B015300EE00530083005300C1005300C100540083005400CF005300D1005300D1005400CF005400D9005300EC005300EC005400D9005400EE0053001B0153001B015400EE00540083005400A4005400A400550083005500A5005400AA005400AA005500A5005500AB005400C0005400C0005500AB005500DC0054001B0154001B015500DC00550083005500C0005500C000560083005600DA0055001B0155001B015600DA00560083005600BF005600BF00570083005700C0005600C1005600C1005700C0005700DA0056001B0156001B015700DA00570083005700C1005700C100580083005800DA0057001C0157001C015800DA00580083005800A3005800A300590083005900A4005800C1005800C1005900A4005900D9005800DA005800DA005900D9005900DB0058001C0158001C015900DB00590083005900A3005900A3005A0083005A00A4005900C2005900C2005A00A4005A00D9005900DA005900DA005A00D9005A00DB0059001C0159001C015A00DB005A0083005A00A3005A00A3005B0083005B00A4005A00BF005A00BF005B00A4005B00D9005A00F9005A00F9005B00D9005B00FA005A001C015A001C015B00FA005B0083005B00A3005B00A3005C0083005C00A5005B00C0005B00C0005C00A5005C00DA005B00DC005B00DC005C00DA005C00DD005B00F9005B00F9005C00DD005C00FA005B001C015B001C015C00FA005C0083005C00A3005C00A3005D0083005D00A7005C00B2005C00B2005D00A7005D00B3005C00C1005C00C1005D00B3005D00DA005C00DC005C00DC005D00DA005D00DD005C00E9005C00E9005D00DD005D00EB005C00F9005C00F9005D00EB005D00FB005C001C015C001C015D00FB005D0083005D00A3005D00A3005E0083005E00A7005D00B1005D00B1005E00A7005E00B4005D00BC005D00BC005E00B4005E00BF005D00C1005D00C1005E00BF005E00DB005D00E9005D00E9005E00DB005E00EB005D00F6005D00F6005E00EB005E00F7005D00F9005D00F9005E00F7005E00FB005D001C015D001C015E00FB005E0083005E00A3005E00A3005F0083005F00A8005E00B2005E00B2005F00A8005F00B4005E00BC005E00BC005F00B4005F00BF005E00C1005E00C1005F00BF005F00DB005E00DE005E00DE005F00DB005F00E1005E00E9005E00E9005F00E1005F00EB005E00F5005E00F5005F00EB005F00FB005E001C015E001C015F00FB005F0083005F00A3005F00A300600083006000A9005F00B3005F00B3006000A9006000B5005F00BC005F00BC006000B5006000DA005F00DE005F00DE006000DA006000E1005F00E8005F00E8006000E1006000E9005F00F4005F00F4006000E9006000FB005F001D015F001D016000FB00600083006000A4006000A400610083006100AA006000BA006000BA006100AA006100DA006000DC006000DC006100DA006100E3006000F3006000F3006100E3006100FB0060001D0160001D016100FB00610083006100A4006100A400620083006200AC006100BB006100BB006200AC006200E2006100F1006100F1006200E2006200FB0061001D0161001D016200FB00620083006200A4006200A400630083006300AE006200BB006200BB006300AE006300E4006200EE006200EE006300E4006300FB0062001D0162001D016300FB00630083006300A4006300A400640083006400B4006300B9006300B9006400B4006400FB0063001D0163001D016400FB00640083006400A4006400A400650083006500FB0064001D0164001D016500FB00650083006500A4006500A400660083006600FA0065001D0165001D016600FA00660083006600A5006600A500670083006700FA0066001D0166001D016700FA00670083006700A4006700A400680083006800FA0067001D0167001D016800FA00680083006800A5006800A500690083006900FA0068001D01" & _
    "68001D016900FA00690083006900A5006900A5006B0083006B00F90069001D0169001D016B00F9006B0083006B00A6006B00A6006D0083006D00F9006B001D016B001D016D00F9006D0084006D00A7006D00A7006E0084006E00F9006D001D016D001D016E00F9006E0084006E00A7006E00A700700084007000F7006E001D016E001D017000F700700084007000A8007000A800710084007100F70070001D0170001D017100F700710084007100A8007100A800730084007300F50071001D0171001D017300F500730084007300A9007300A900740084007400F50073001D0173001D017400F500740085007400A9007400A900760085007600F40074001D0174001D017600F400760085007600AA007600AA00780085007800F40076001D0176001D017800F400780086007800AB007800AB00790086007900D2007800D4007800D4007900D2007900F40078001D0178001D017900F400790086007900AB007900AB007C0086007C00F30079001D0179001D017C00F3007C0086007C00AB007C00AB007D0086007D00F2007C001D017C001D017D00F2007D0086007D00AA007D00AA007E0086007E00F2007D001D017D001D017E00F2007E0087007E00AA007E00AA00800087008000F3007E001D017E001D018000F300800087008000A9008000A900810087008100F40080001D0180001D018100F400810087008100A9008100A900820087008200F50081001D0181001D018200F50082008800820097008200970083008800830098008200A9008200A900830098008300F0008200F1008200F1008300F0008300F50082001D0182001D018300F50083008800830097008300970084008800840098008300A9008300A900840098008400C7008300C8008300C8008400C7008400F40083001C0183001C018400F40084008800840096008400960085008800850099008400AA008400AA00850099008500C4008400C8008400C8008500C4008500D6008400DA008400DA008500D6008500F30084001C0184001C018500F30085008800850097008500970086008800860099008500AA008500AA00860099008600C2008500CB008500CB008600C2008600D5008500DD008500DD008600D5008600F30085001C0185001C018600F3008600880086009C0086009C008700880087009D008600AB008600AB0087009D008700C0008600CD008600CD008700C0008700D4008600DF008600DF008700D4008700F30086001C0186001C018700F300870089008700980087009800880089008800990087009C0087009C008800990088009D008700AB008700AB0088009D008800BE008700C8008700C8008800BE008800D8008700E2008700E2008800D8008800F30087001C0187001C018800F300880089008800AB008800AB00890089008900BD008800C8008800C8008900BD008900D8008800E2008800E2008900D8008900F20088001C0188001C018900F200890089008900AC008900AC008A0089008A00BE008900CA008900CA008A00BE008A00D6008900E1008900E1008A00D6008A00F20089001C0189001C018A00F2008A0089008A00AD008A00AD008B0089008B00BE008A00CB008A00CB008B00BE008B00D4008A00E0008A00E0008B00D4008B00F2008A001C018A001C018B00F2008B008A008B00AE008B00AE008C008A008C00BF008B00C5008B00C5008C00BF008C00DB008B00E0008B00E0008C00DB008C00F0008B001C018B001C018C00F0008C008A008C009A008C009A008D008A008D009B008C00AE008C00AE008D009B008D00C0008C00C5008C00C5008D00C0008D00DA008C00DF008C00DF008D00DA008D00F0008C001C018C001C018D00F0008D008A008D00AE008D00AE008E008A008E00C1008D00C9008D00C9008E00C1008E00D9008D00DE008D00DE008E00D9008E00F0008D001B018D001B018E00F0008E008B008E00AF008E00AF008F008B008F00C2008E00CA008E00CA008F00C2008F00DB008E00DD008E00DD008F00DB008F00EF008E001B018E001B018F00EF008F008B008F00B0008F00B00090008B009000C2008F00C6008F00C6009000C2009000D0008F00D1008F00D1009000D0009000DA008F00DD008F00DD009000DA009000EE008F001B018F001B019000EE0090008B009000B1009000B10091008B009100C3009000C6009000C6009100C3009100D9009000DB009000DB009100D9009100ED0090001B0190001B019100ED0091008C009100B1009100B10092008C009200D8009100DA009100DA009200D8009200ED0091001B0191001B019200ED0092008C009200B3009200B30093008C009300D8009200D9009200D9009300D8009300EC0092001B0192001B019300EC0093008C009300B3009300B30094008C009400EB0093001B0193001B019400EB0094008C009400B4009400B40095008C009500C8009400CC009400CC009500C8009500D2009400D7009400D7009500D2009500EB0094001B0194001B019500EB0095008D009500B5009500B50096008D009600CC009500D2009500D2009600CC009600E90095001B0195001B019600E90096008D009600B6009600B60098008D009800E80096001A0196001A019800E80098008D009800B6009800B60099008D009900E70098001A0198001A019900E70099008E009900B7009900B7009A008E009A00E70099001A0199001A019A00E7009A008E009A00B7009A00B7009B008E009B00E5009A0019019A0019019B00E5009B008E009B00B9009B00B9009C008E009C00E5009B0019019B0019019C00E5009C008E009C00BA009C00BA009D008E009D00E5009C0019019C0019019D00E500" & _
    "9D008E009D00BA009D00BA009E008E009E00E3009D0019019D0019019E00E3009E008E009E00BD009E00BD009F008E009F00E2009E0019019E0019019F00E2009F008E009F00BE009F00BE00A0008E00A000E0009F0019019F001901A000E000A0008F00A000BF00A000BF00A1008F00A100DF00A0001901A0001901A100DF00A1008F00A100C100A100C100A2008F00A200DE00A1001901A1001901A200DE00A2008F00A200C300A200C300A3008F00A300DC00A2001901A2001901A300DC00A3008F00A300C400A300C400A4008F00A400DB00A3001901A3001901A400DB00A4008F00A400C600A400C600A5008F00A500D800A4001901A4001901A500D800A5008F00A500C700A500C700A6008F00A600D600A5001901A5001901A600D600A6008F00A600CB00A600CB00A7008F00A700D400A6001901A6001901A700D400A7008F00A700D000A700D000A8008F00A800D100A7001901A7001901A800D100A8009000A8001901A8001901AB009000AB009000AB001A01AB001A01AC009000AC009000AC00E300AC00E300AD009000AD00EA00AC001A01AC001A01AD00EA00AD009000AD00E000AD00E000AE009000AE00EB00AD001A01AD001A01AE00EB00AE009000AE00DE00AE00DE00AF009000AF00EB00AE001A01AE001A01AF00EB00AF009000AF00DC00AF00DC00B0009000B000EB00AF001A01AF001A01B000EB00B0009000B000DB00B000DB00B1009000B100E900B0001A01B0001A01B100E900B1009000B100DA00B100DA00B2009000B200EB00B1001B01B1001B01B200EB00B2009000B200D900B200D900B3009000B300EB00B2001B01B2001B01B300EB00B3009000B300D800B300D800B4009000B400EA00B3001B01B3001B01B400EA00B4008F00B400D600B400D600B5008F00B500EA00B4001B01B4001B01B500EA00B5008F00B500C500B500C500B6008F00B600C800B500D300B500D300B600C800B600E900B5001B01B5001B01B600E900B6008F00B600C400B600C400B7008F00B700CB00B600CF00B600CF00B700CB00B700D000B600D200B600D200B700D000B700E900B6001C01B6001C01B700E900B7008F00B700C400B700C400B8008F00B800CB00B700CE00B700CE00B800CB00B800D000B700D100B700D100B800D000B800E900B7001C01B7001C01B800E900B8008F00B800C300B800C300B9008F00B900E900B8001D01B8001D01B900E900B9008F00B900C300B900C300BA008F00BA00E800B9002201B9002201BA00E800BA008F00BA00C400BA00C400BB008F00BB00E800BA002601BA002601BB00E800BB003701BA003801BA003801BB003701BB008F00BB00C300BB00C300BC008F00BC00E800BB003B01BB003B01BC00E800BC008F00BC00C300BC00C300BD008F00BD00E700BC001701BC001701BD00E700BD001D01BC003E01BC003E01BD001D01BD008E00BD00C300BD00C300BE008E00BE00E700BD001701BD001701BE00E700BE002101BD003001BD003001BE002101BE003A01BD004501BD004501BE003A01BE008E00BE00C300BE00C300BF008E00BF00E700BE001701BE001701BF00E700BF003F01BE004901BE004901BF003F01BF008E00BF00C400BF00C400C0008E00C000E600BF001801BF001801C000E600C0004501BF004D01BF004D01C0004501C0008E00C000C400C000C400C1008E00C100E600C0001801C0001801C100E600C1004901C0004F01C0004F01C1004901C1008E00C100C400C100C400C2008E00C200E600C1001801C1001801C200E600C2004C01C1005101C1005101C2004C01C2008E00C200BD00C200BD00C3008E00C300BF00C200C400C200C400C300BF00C300E500C2001801C2001801C300E500C3004E01C2005301C2005301C3004E01C3008D00C300BD00C300BD00C4008D00C400C000C300C500C300C500C400C000C400E500C3001801C3001801C400E500C4005101C3005501C3005501C4005101C4008D00C400BD00C400BD00C5008D00C500C100C400C400C400C400C500C100C500E400C4001801C4001801C500E400C5005201C4005701C4005701C5005201C5008D00C500BB00C500BB00C6008D00C600C100C500C400C500C400C600C100C600E400C5001801C5001801C600E400C6005401C5005801C5005801C6005401C6008D00C600BB00C600BB00C7008D00C700C200C600C400C600C400C700C200C700E400C6001901C6001901C700E400C7005601C6005A01C6005A01C7005601C7008D00C700BB00C700BB00C8008D00C800E300C7001901C7001901C800E300C8005701C7005B01C7005B01C8005701C8008C00C800BB00C800BB00C9008C00C900E200C8001901C8001901C900E200C9005801C8005C01C8005C01C9005801C9008C00C900BB00C900BB00CA008C00CA00E200C9001901C9001901CA00E200CA005901C9005C01C9005C01CA005901CA008C00CA00BB00CA00BB00CB008C00CB00E200CA001901CA001901CB00E200CB005A01CA005D01CA005D01CB005A01CB008C00CB00BB00CB00BB00CC008C00CC00E200CB001901CB001901CC00E200CC005B01CB005E01CB005E01CC005B01CC008C00CC00BA00CC00BA00CD008C00CD00E100CC001901CC001901CD00E100CD005C01CC005F01CC005F01CD005C01CD008B00CD00BA00CD00BA00CE008B00CE00E100CD001901CD001901CE00E100CE005C01CD006001CD006001CE005C01CE008B00CE00BA00CE00BA00D0008B00D000E000CE001901CE001901D000E000D0005D01CE006001CE006001D0005D01D0008A00D000BC00D000BC00D1008A00D100DE00D0001901D0001901D100DE00D1005E01D0006101" & _
    "D0006101D1005E01D1008A00D100BC00D100BC00D2008A00D200DA00D1001901D1001901D200DA00D2005E01D1006101D1006101D2005E01D2008A00D200BC00D200BC00D3008A00D300D700D2001901D2001901D300D700D3005F01D2006201D2006201D3005F01D3008900D300BD00D300BD00D4008900D400D400D3001901D3001901D400D400D4005F01D3006201D3006201D4005F01D4008900D400BE00D400BE00D5008900D500C600D4001901D4001901D500C600D5006001D4006301D4006301D5006001D5008800D500BE00D500BE00D6008800D600C400D5001901D5001901D600C400D6006001D5006301D5006301D6006001D6008800D6001A01D6001A01D7008800D7006001D6006301D6006301D7006001D7008800D7001A01D7001A01D8008800D8006101D7006301D7006301D8006101D8008700D8001A01D8001A01D9008700D9006101D8006401D8006401D9006101D9008600D9001A01D9001A01DB008600DB006101D9006401D9006401DB006101DB008500DB001A01DB001A01DC008500DC006201DB006401DB006401DC006201DC008400DC001A01DC001A01DD008400DD006201DC006501DC006501DD006201DD008300DD001B01DD001B01DF008300DF006201DD006501DD006501DF006201DF008100DF008900DF008900E0008100E0008C00DF001B01DF001B01E0008C00E0006201DF006501DF006501E0006201E0007F00E0008600E0008600E1007F00E1008E00E0001B01E0001B01E1008E00E1006301E0006501E0006501E1006301E1007D00E1008300E1008300E2007D00E2008E00E1001B01E1001B01E2008E00E2006301E1006501E1006501E2006301E2007A00E2008000E2008000E3007A00E3008E00E2001C01E2001C01E3008E00E3006301E2006601E2006601E3006301E3007800E3007E00E3007E00E4007800E4008E00E3001C01E3001C01E4008E00E4006301E3006601E3006601E4006301E4007600E4007B00E4007B00E5007600E5008E00E4001C01E4001C01E5008E00E5006301E4006601E4006601E5006301E5007300E5007900E5007900E6007300E6008F00E5001C01E5001C01E6008F00E6006301E5006601E5006601E6006301E6007200E6007700E6007700E7007200E7008F00E6001D01E6001D01E7008F00E7006401E6006601E6006601E7006401E7007000E7007500E7007500E8007000E8009000E7001D01E7001D01E8009000E8006401E7006601E7006601E8006401E8006E00E8007300E8007300E9006E00E9009000E8001D01E8001D01E9009000E9006401E8006601E8006601E9006401E9006C00E9007200E9007200EA006C00EA009000E9001E01E9001E01EA009000EA006401E9006601E9006601EA006401EA006B00EA007000EA007000EB006B00EB008F00EA001E01EA001E01EB008F00EB006401EA006701EA006701EB006401EB006D01EA007501EA007501EB006D01EB006A00EB006E00EB006E00EC006A00EC008F00EB001E01EB001E01EC008F00EC006401EB006701EB006701EC006401EC006901EB007001EB007001EC006901EC007301EB007801EB007801EC007301EC006900EC006D00EC006D00ED006900ED008F00EC001F01EC001F01ED008F00ED006401EC006D01EC006D01ED006401ED007501EC007A01EC007A01ED007501ED006800ED006B00ED006B00EE006800EE008F00ED001F01ED001F01EE008F00EE006401ED006B01ED006B01EE006401EE007601ED007B01ED007B01EE007601EE006700EE006B00EE006B00EF006700EF008E00EE002001EE002001EF008E00EF006401EE006801EE006801EF006401EF007901EE007D01EE007D01EF007901EF006700EF006A00EF006A00F0006700F0008E00EF002001EF002001F0008E00F0006101EF006701EF006701F0006101F0007B01EF007F01EF007F01F0007B01F0006600F0006900F0006900F1006600F1008E00F0002001F0002001F1008E00F1006001F0006501F0006501F1006001F1007C01F0008001F0008001F1007C01F1006600F1006900F1006900F2006600F2008E00F1002101F1002101F2008E00F2005E01F1006201F1006201F2005E01F2007E01F1008101F1008101F2007E01F2006500F2006800F2006800F3006500F3008E00F2002201F2002201F3008E00F3005E01F2006001F2006001F3005E01F3007F01F2008201F2008201F3007F01F3006500F3006800F3006800F4006500F4008D00F3002201F3002201F4008D00F4005D01F3005F01F3005F01F4005D01F4008001F3008201F3008201F4008001F4006500F4006700F4006700F5006500F5008D00F4002301F4002301F5008D00F5005D01F4005F01F4005F01F5005D01F5008001F4008201F4008201F5008001F5006500F5006700F5006700F6006500F6008D00F5002301F5002301F6008D00F6005D01F5006001F5006001F6005D01F6008101F5008301F5008301F6008101F6006400F6006700F6006700F7006400F7008C00F6002401F6002401F7008C00F7005F01F6006301F6006301F7005F01F7008101F6008301F6008301F7008101F7006400F7006700F7006700F8006400F8008C00F7002501F7002501F8008C00F8006001F7006501F7006501F8006001F8008201F7008301F7008301F8008201F8006400F8006700F8006700F9006400F9008C00F8002601F8002601F9008C00F9006101F8006701F8006701F9006101F9006E01F8007101F8007101F9006E01F9008201F8008301F8008301F9008201F9006400F9006700F9006700FA006400FA008C00F9002601F9002601FA008C00FA006101F9006301F9006301FA006101" & _
    "FA006D01F9007301F9007301FA006D01FA008201F9008401F9008401FA008201FA006400FA006600FA006600FB006400FB008B00FA002701FA002701FB008B00FB006001FA006201FA006201FB006001FB006C01FA006F01FA006F01FB006C01FB007001FA007401FA007401FB007001FB008201FA008401FA008401FB008201FB006400FB006600FB006600FC006400FC008B00FB002801FB002801FC008B00FC005F01FB006101FB006101FC005F01FC006C01FB006F01FB006F01FC006C01FC007101FB007501FB007501FC007101FC008101FB008301FB008301FC008101FC006300FC006600FC006600FD006300FD008A00FC002901FC002901FD008A00FD005F01FC006101FC006101FD005F01FD006C01FC007401FC007401FD006C01FD008101FC008201FC008201FD008101FD006300FD006600FD006600FE006300FE008A00FD002901FD002901FE008A00FE005E01FD006001FD006001FE005E01FE006B01FD007301FD007301FE006B01FE008001FD008201FD008201FE008001FE006300FE006600FE006600FF006300FF008A00FE002A01FE002A01FF008A00FF005D01FE005F01FE005F01FF005D01FF006A01FE006C01FE006C01FF006A01FF006E01FE007201FE007201FF006E01FF007F01FE008101FE008101FF007F01FF006300FF006600FF0066000001630000018900FF002B01FF002B010001890000015D01FF005F01FF005F0100015D0100017F01FF008101FF00810100017F01000163000001660000016600010163000101890000012C0100012C010101890001015C0100015E0100015E0101015C0101017E01000181010001810101017E01010163000101660001016600020163000201890001012C0101012C010201890002015B0101015E0101015E0102015B0102017E01010180010101800102017E01020163000201660002016600030163000301880002012D0102012D010301880003015A0102015D0102015D0103015A0103017E01020180010201800103017E01030163000301660003016600040163000401880003012E0103012E010401880004015A0103015C0103015C0104015A0104017E01030180010301800104017E01040163000401660004016600050163000501880004012E0104012E01050188000501580104015B0104015B010501580105017D0104017F0104017F0105017D01050163000501660005016600060163000601870005012F0105012F01060187000601570105015A0105015A010601570106017D0105017F0105017F0106017D0106016300060166000601660007016300070187000601300106013001070187000701560106015901060159010701560107017C0106017F0106017F0107017C0107016300070166000701660008016300080187000701310107013101080187000801550107015801070158010801550108017C0107017F0107017F0108017C0108016300080166000801660009016300090186000801320108013201090186000901540108015601080156010901540109017C0108017E0108017E0109017C010901640009016600090166000A0164000A01850009013201090132010A0185000A01530109015501090155010A0153010A017B0109017E0109017E010A017B010A0164000A0166000A0166000B0164000B0185000A0133010A0133010B0185000B0152010A0155010A0155010B0152010B017B010A017E010A017E010B017B010B0164000B0167000B0167000C0164000C0185000B0134010B0134010C0185000C0152010B0154010B0154010C0152010C017C010B017E010B017E010C017C010C0164000C0167000C0167000D0164000D0184000C0135010C0135010D0184000D0151010C0153010C0153010D0151010D017C010C017E010C017E010D017C010D0164000D0167000D0167000E0164000E0184000D0135010D0135010E0184000E0150010D0152010D0152010E0150010E017D010D017F010D017F010E017D010E0164000E0167000E0167000F0164000F0183000E0136010E0136010F0183000F0150010E0152010E0152010F0150010F017D010E017F010E017F010F017D010F0164000F0167000F01670010016400100183000F0137010F01370110018300100150010F0152010F0152011001500110017E010F0180010F01800110017E01100164001001670010016700110164001101820010013801100138011101820011014F01100151011001510111014F0111017E01100180011001800111017E01110164001101670011016700120164001201820011013801110138011201820012014E01110150011101500112014E0112017F01110181011101810112017F01120164001201670012016700130164001301810012013901120139011301810013013A0112013C0112013C0113013A0113014E01120150011201500113014E0113017F01120181011201810113017F01130164001301670013016700140164001401800013013C0113013C011401800014014D0113014F0113014F0114014D0114018001130182011301820114018001140165001401670014016700150165001501800014013C0114013C011501800015014C0114014F0114014F0115014C0115018101140182011401820115018101150165001501680015016800160165001601800015013C0115013C011601800016014C0115014E0115014E0116014C01160181011501830115018301160181011601650016016800160168001701650017017F0016013C0116013C0117017F0017014B0116014D0116014D0117014B01170182011601830116018301170182011701650017016800" & _
    "170168001801650018017E0017013D0117013D0118017E0018014A0117014D0117014D0118014A0118015401170155011701550118015401180182011701840117018401180182011801650018016800180168001901650019017D0018013D0118013D0119017D001901490118014C0118014C0119014901190182011801840118018401190182011901650019016800190168001A0165001A016B0019016C0019016C001A016B001A017D0019013E0119013E011A017D001A01480119014B0119014B011A0148011A01520119015301190153011A0152011A01820119018401190184011A0182011A0166001A0169001A0169001B0166001B016B001A016C001A016C001B016B001B017C001A013E011A013E011B017C001B0148011A014A011A014A011B0148011B0181011A0184011A0184011B0181011B0166001B0169001B0169001C0166001C016B001B016D001B016D001C016B001C017B001B013F011B013F011C017B001C0147011B0149011B0149011C0147011C0181011B0183011B0183011C0181011C0166001C0169001C0169001D0166001D016B001C016D001C016D001D016B001D017B001C013F011C013F011D017B001D0146011C0149011C0149011D0146011D0181011C0183011C0183011D0181011D0166001D016A001D016A001E0166001E016C001D016D001D016D001E016C001E017A001D0140011D0140011E017A001E0146011D0148011D0148011E0146011E0182011D0184011D0184011E0182011E0166001E016A001E016A001F0166001F016C001E016D001E016D001F016C001F017A001E0140011E0140011F017A001F0145011E0148011E0148011F0145011F0182011E0184011E0184011F0182011F0167001F016A001F016A002001670020016C001F016D001F016D0020016C00200179001F0141011F01410120017900200145011F0147011F01470120014501200182011F0185011F018501200182012001670020016A0020016A002101670021016C0020016D0020016D0021016C0021016E0020016F0020016F0021016E002101780020014101200141012101780021014501200147012001470121014501210183012001850120018501210183012101670021016A0021016A002201670022016B0021016D0021016D0022016B0022016E00210170002101700022016E002201780021014201210142012201780022014501210148012101480122014501220183012101850121018501220183012201670022016A0022016A002301670023016C00220170002201700023016C002301770022014201220142012301770023014501220148012201480123014501230183012201860122018601230183012301670023016B0023016B002401670024016C00230170002301700024016C002401750023014301230143012401750024014501230148012301480124014501240183012301860123018601240183012401680024016B0024016B002501680025016C00240171002401710025016C00250174002401430124014301250174002501450124014801240148012501450125016401240165012401650125016401250183012401850124018501250183012501680025016B0025016B002601680026016C00250172002501720026016C00260174002501440125014401260174002601450125014801250148012601450126016201250166012501660126016201260170012501720125017201260170012601830125018501250185012601830126016800260144012601440127016800270145012601480126014801270145012701610126016501260165012701610127016F01260173012601730127016F01270182012601850126018501270182012701690027014801270148012801690028015F01270165012701650128015F0128016F01270173012701730128016F0128018201270184012701840128018201280169002801480128014801290169002901640128016501280165012901640129016F01280172012801720129016F01290182012801840128018401290182012901690029014801290148012A0169002A01830129018401290184012A0183012A016A002A0148012A0148012C016A002C0183012A0185012A0185012C0183012C016B002C0148012C0148012E016B002E0183012C0185012C0185012E0183012E016C002E0148012E01480130016C00300183012E0185012E0185013001830130016D00300148013001480131016D003101820130018401300184013101820131016E00310148013101480132016E003201810131018301310183013201810132016E00320148013201480133016E0033017F01320183013201830133017F0133016E00330148013301480134016E0034017E01330181013301810134017E0134016E00340148013401480135016E0035017C0134017F0134017F0135017C0135016E00350148013501480136016E0036017A0135017E0135017E0136017A0136016D00360148013601480137016D003701780136017D0136017D013701780137016D00370148013701480138016D003801770137017B0137017B013801770138016D00380148013801480139016D003901750138017901380179013901750139016C0039014801390148013A016C003A01750139017801390178013A0175013A016C003A0148013A0148013B016C003B0174013A0177013A0177013B0174013B016C003B0148013B0148013C016C003C0172013B0176013B0176013C0172013C016B003C0148013C0148013D016B003D0171013C0175013C0175013D0171013D016B003D0148013D0148013E016B00" & _
    "3E0170013D0174013D0174013E0170013E016B003E0148013E0148013F016B003F016E013E0172013E0172013F016E013F016B003F0148013F01480140016B0040016C013F0171013F01710140016C0140016B00400148014001480141016B0041016B01400170014001700141016B0141016B00410148014101480142016B004201690141016E0141016E014201690142016B00420148014201480143016B004301680142016C0142016C014301680143016A00430148014301480144016A004401650143016A0143016A014401650144016A00440148014401480145016A004501640144016901440169014501640145016A00450148014501480146016A004601630145016701450167014601630146016A00460148014601480147016A004701630146016601460166014701630147016A00470148014701480148016A004801620147016501470165014801620148016A00480148014801480149016A004901610148016501480165014901610149016A0049014901490149014A016A004A01600149016501490165014A0160014A016A004A0148014A0148014B016A004B0160014A0166014A0166014B0160014B016A004B0148014B01480150016A00500162014B0165014B0165015001620150016A00500147015001470151016A005101620150016501500165015101620151016B00510145015101450152016B005201620151016401510164015201620152016B00520145015201450153016B00530146015201470152014701530146015301610152016401520164015301610153016B00530144015301440154016B00540146015301470153014701540146015401610153016301530163015401610154016B00540143015401430155016B005501600154016301540163015501600155016C00550143015501430156016C005601600155016301550163015601600156016C00560143015601430157016C005701600156016201560162015701600157016C00570142015701420158016C0058015F01570162015701620158015F0158016C00580141015801410159016C0059015F01580162015801620159015F0159016D0059014101590141015A016D005A015F0159016101590161015A015F015A016D005A0140015A0140015B016D005B015E015A0161015A0161015B015E015B016D005B013F015B013F015C016D005C015E015B0160015B0160015C015E015C016E005C013E015C013E015D016E005D015E015C0160015C0160015D015E015D016F005D013D015D013D015E016F005E015D015D0160015D0160015E015D015E016F005E013D015E013D015F016F005F015D015E015F015E015F015F015D015F016F005F013C015F013C0160016F0060015D015F015F015F015F0160015D016001700060013A0160013A016101700061015C0160015F0160015F0161015C016101710061013A0161013A016201710062015C0161015F0161015F0162015C016201710062013801620138016301710063015C0162015F0162015F0163015C016301720063013801630138016401720064015C0163015E0163015E0164015C016401730064013701640137016501730065015C0164015E0164015E0165015C016501740065013601650136016601740066015C0165015E0165015E0166015C016601750066013401660134016701750067015C0166015E0166015E0167015C016701750067013301670133016801750068015C0167015E0167015E0168015C016801750068013201680132016901750069015C0168015E0168015E0169015C016901760069013001690130016A0176006A015C0169015E0169015E016A015C016A0176006A012E016A012E016D0176006D015C016A015E016A015E016D015C016D0176006D012D016D012D016E0176006E015C016D015E016D015E016E015C016E0177006E017A006E017A006F0177006F017B006E012D016E012D016F017B006F015C016E015E016E015E016F015C016F0177006F017A006F017A007001770070017F006F012D016F012D0170017F0070015C016F015E016F015E0170015C017001780070017B0070017B007101780071017D0070017F0070017F0071017D007101800070012C0170012C017101800071015C0170015F0170015F0171015C017101780071017B0071017B007201780072017D0071017E0071017E0072017D007201800071012C0171012C017201800072015C0171015F0171015F0172015C017201780072017B0072017B007301780073017D0072017E0072017E0073017D00730182007201830072018300730182007301850072012C0172012C017301850073015D0172015F0172015F0173015D017301790073017C0073017C00750179007501850073012B0173012B017501850075015D0173015F0173015F0175015D017501790075017C0075017C00760179007601860075012B0175012B017601860076015D0175015F0175015F0176015D0176017A0076017D0076017D0077017A007701880076012A0176012A017701880077015D0176015F0176015F0177015D0177017A0077017D0077017D0078017A007801890077012A0177012A017801890078015E0177015F0177015F0178015E0178017A0078017E0078017E0079017A007901890078012A0178012A017901890079015E0178015F0178015F0179015E0179017A0079017E0079017E007A017A007A01890079012901790129017A0189007A015E0179016001790160017A015E017A017B007A017D007A017D007B017B007B0189007A0129017A0129017B0189007B015E017A0160017A0160017B015E017B0158007B015B00" & _
    "7B015B007C0158007C017B007B017D007B017D007C017B007C0189007B0129017B0129017C0189007C015E017B0160017B0160017C015E017C0154007C015D007C015D007D0154007D017B007C017D007C017D007D017B007D0189007C0128017C0128017D0189007D015E017C0160017C0160017D015E017D0150007D0155007D0155007E0150007E015B007D015F007D015F007E015B007E017A007D017D007D017D007E017A007E0189007D0128017D0128017E0189007E015E017D0160017D0160017E015E017E014D007E0152007E0152007F014D007F015D007E0161007E0161007F015D007F017A007E017D007E017D007F017A007F0189007E0127017E0127017F0189007F015E017E0160017E0160017F015E017F014A007F014F007F014F0080014A0080015E007F0162007F01620080015E0080017A007F017D007F017D0080017A00800189007F0127017F0127018001890080015E017F0160017F01600180015E018001470080014C0080014C00810147008101600080016400800164008101600081017A0080017C0080017C0081017A008101890080012601800126018101890081015E01800161018001610181015E01810144008101490081014900820144008201620081016600810166008201620082017A0081017C0081017C0082017A008201890081012601810126018201890082015E01810161018101610182015E01820141008201460082014600830141008301630082016800820168008301630083017A0082017C0082017C0083017A008301880082012501820125018301880083015E01820161018201610183015E0183013D00830143008301430084013D008401650083016900830169008401650084017A0083017C0083017C0084017A0084018B00830125018301250184018B0084015E01830161018301610184015E0184013B00840140008401400085013B008501670084016B0084016B00850167008501790084017C0084017C00850179008501880084012401840124018501880085015E01840161018401610185015E018501380085013D0085013D00860138008601690085016C0085016C00860169008601790085017C0085017C00860179008601880085012401850124018601880086015E01850161018501610186015E01860100010181000101810001018100010181000101810001018100010181000101810001018100010181000101810001018100010181000101810001018100010181000101810001018100010181000101810001018100010181000101810001018100010181000101810001018100010181000101810001018100010181000101810001018100010181000101810001018100010181000101810001018100010181000101810001018100010181000101810001018100010181000101810001018100010181000101810001018100010181000101810001018100010181000101810001018100010181000101810001018100010181000101810001018100010181000101810001018100010181000101810001018100010181000101810001018100010181000101810001018100010181000101810001018100010181000101810001018100010181000101810001018100010181000101810001018100010181000101810001018100010181000101810001018100010181000101810001018100010181000101810001018100010181000101810001018100010181000101810001018100010181000101810001018100010181000101810001018100010181000101810001018100010181000101810001018100010181000101810001018100010181000101810001018100010181000101810001018100010181000101810001018100010181000101810001018100010181000101810001018100010181000101810001018100010181000101810001018100010181000101810001018100010181000101810001018100010181000101810001018100010181000101810001018100010181000101810001018100010181000101810001018100010181000101810001018100010181000101810001018100010181000101810001018100010181000101810001018100010181000101810001018100010181000101810001018100010181000101810001018100010181000101810001018100010181000101810001018100010181000101810001018100010181000101810001018100010181000101810001018100010181000101810001018100010181000101810001018100010181000101810001018100010181000101810001018100010181000101810001018100010181000101810001018100010181000101810001018100010181000101810001018100010181000101810001018100010181000101810001018100010181000101810001018100010181000101810001018100010181000101810001018100010181000101810001018100010181000101810001018100010181000101810001018100010181000101810001018100010181000101810001018100010181000101810001018100010181000101810001018100010181000101810001018100010181000101810001018100010181000101810001018100010181000101810001018100010181000101810001018100010181000101810001018100010181000101810001018100010181000101810001018100010181000101810001018100010181000101810001018100010181000101810001018100010181000101810001018100010181000101810001018100010181000101810001018100010181000101810001" & _
    "018100010181000101810001018100010181000101810001018100010181000101810001018100010181000101810001018100010181000101810001018100010181000101810001018100010181000101810001018100010181000101810001018100010181000101810001018100010181000101810001018100010181000101810001018100010181000101810001018100010181000101810001018100010181000101810001018100010181000101810001018100010181000101810001018100010181000101810001018100010181000101810001018100010181000101810001018100010181000101810001018100010181000101810001018100010181000101810001018100010181000101810001018100010181000101810001018100010181000101810001018100010181000101810001018100010181000101810001018100010181000101810001018100010181000101810001018100010181000101810001018100010181000101810001018100010181000101810001018100010181000101810001018100010181000101810001018100010181000101810001018100010181000101810001018100010181000101810001018100010181000101810001018100010181000101810001018100010181000101810001018100010181000101810001018100010181000101810001018100010181000101810001018100010181000101810001018100010181000101810001018100010181000101810001018100010181000101810001018100010181000101810001018100010181000101810001018100010181000101810001018100010181000101810001018100010181000101810001018100010181000101810001018100010181000101810001018100010181000101810001018100010181000101810001018100010181000101810001018100010181000101810001018100010181000101810001018100010181000101810001018100010181000101810001018100010181000101810001018100010181000101810001018100010181000101810001018100010181000101810001018100010181000101810001018100010181000101810001018100010181000101810001018100010181000101810001018100010181000101810001018100010181000101810001018100010181000101810001018100010181000101810001018100010181000101810001018100010181000101810001018100010181000101810001018100010181000101810001018100010181000101810001018100010181000101810001018100010181000101810001018100010181000101810001018100010181000101810001018100010181000101810001018100010181000101810001018100010181000101810001018100010181000101810001018100010181000101810001018100010181000101810001018100010181000101810001018100010181000101810001018100010181000101810001018100010181000101810001018100010181000101810001018100010181000101810001018100010181000101810001018100010181000101810001018100010181000101810001018100010181000101810001018100010181000101810001018100010181000101810001018100010181000101810001018100010181000101810001018100010181000101810001018100010181000101810001018100010181000101810001018100010181000101810001018100010181000101810001018100010181000101810001018100010181000101810001018100010181000101810001018100010181000101810001018100010181000101810001018100010181000101810001018100010181000101810001018100010181000101810001018100010181000101810001018100010181000101810001018100010181000101810001018100010181000101810001018100010181000101810001018100010181000101810001018100010181000101810001018100010181000101810001018100010181000101810001018100010181000101810001018100010181000101810001018100010181000101810001018100010181000101810001018100010181000101810001018100010181000101810001018100010181000101810001018100010181000101810001018100010181000101810001018100010181000101810001018100010181000101810001018100010181000101810001018100010181000101810001018100010181000101810001018100010181000101810001018100010181000101810001018100010181000101810001018100010181000101810001018100010181000101810001018100010181000101810001018100010181000101810001018100010181000101810001018100010181000101810001018100010181000101810001018100010181000101810001018100010181000101810001018100010181000101810001018100010181000101810001018100010181000101810001018100010181000101810001018100010181000101810001018100010181000101810001018100010181000101810001018100010181000101810001018100010181000101810001018100010181000101810001018100010181000101810001018100010181000101810001018100010181000101810001018100010181000101810001018100010181000101810001018100010181000101810001018100010181000101810001018100010181000101810001018100010181000101810001018100010181000101810001" & _
    "01810001018100010181000101810001018100010181000101810001018100010181000101810001018100010181000101810001018100010181000101810001018100010181000101810001018100010181000101810001018100010181000101810001018100010181000101810001018100010181000101810001018100010181000101810001018100010181000101810001018100010181000101810001018100010181000101810001018100010181000101810001018100010181000101810001018100010181000101810001018100010181000101810001018100010181000101810001018100010181000101810001018100010181000101810001018100010181000101810001018100010181000101810001018100010181000101810001018100010181000101810001018100010181000101810001018100010181000101810001018100010181000101810001018100010181000101810001018100010181000101810001018100010181000101810001018100010181000101810001018100010181000101810001018100010181000101810001018100010181000101810001018100010181000101810001018100010181000101810001018100010181000101810001018100010181000101810001018100010181000101810001018100010181000101810001018100010181000101810001018100010181000101810001018100010181000101810001018100010181000101810001018100010181000101810001018100010181000101810001018100010181000101810001018100010181000101810001018100010181000101810001018100010181000101810001018100010181000101810001018100010181000101810001018100010181000101810001018100010181000101810001018100010181000101810001018100010181000101810001018100010181000101810001018100010181000101810001018100010181000101810001018100010181000101810001018100010181000101810001018100010181000101810001018100010181000101810001018100010181000101810001018100010181000101810001018100010181000101810001018100010181000101810001018100010181000101810001018100010181000101810001018100010181000101810001018100010181000101810001018100010181000101810001018100010181000101810001018100010181000101810001018100010181000101810001018100010181000101810001018100010181000101810001018100010181000101810001018100010181000101810001018100010181000101810001018100010181000101810001018100010181000101810001018100010181000101810001018100010181000101810001018100010181000101810001018100010181"

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

    Global $iWidth = 390 * $fScale
    Global $iHeight = 390 * $fScale

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

    Global $hGui = GUICreate("Test", $iWidth, $iHeight)
    GUISetBkColor(0xC00000, $hGui)
    GUISetOnEvent($GUI_EVENT_CLOSE, "_Exit")

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

    _SetRegion($hGui, $bRegion, $fScale)
    GUISetState()

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

    While Sleep(20)
    WEnd

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

    Func _SetRegion($hWnd, ByRef $bRegion, $fScale = 1)
    _GDIPlus_Startup()

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

    Local $iData = BinaryLen($bRegion)
    Local $tData = DllStructCreate("byte[" & $iData & "];")
    DllStructSetData($tData, 1, $bRegion)
    Local $aResult = DllCall($ghGDIPDll, "uint", "GdipCreateRegionRgnData", "ptr", DllStructGetPtr($tData), "int", $iData, "int*", 0)
    Local $hRegion = $aResult[3]

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

    Local $hMatrix = _GDIPlus_MatrixCreate()
    _GDIPlus_MatrixScale($hMatrix, $fScale, $fScale)
    _GDIPlus_MatrixTranslate($hMatrix, _WinAPI_GetSystemMetrics(7), _WinAPI_GetSystemMetrics(8) + _WinAPI_GetSystemMetrics($SM_CYSIZE) + 1)
    DllCall($ghGDIPDll, "uint", "GdipTransformRegion", "hwnd", $hRegion, "hwnd", $hMatrix)
    _GDIPlus_MatrixDispose($hMatrix)

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

    Local $aSize = WinGetPos(HWnd($hWnd))
    Local $tRect = _GDIPlus_RectFCreate(0, 0, $aSize[2], $aSize[3])
    $aResult = DllCall($ghGDIPDll, "uint", "GdipCreateRegionRect", "ptr", DllStructGetPtr($tRect), "int*", 0)
    Local $hRegion_1 = $aResult[2]

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

    Local $aClient = WinGetClientSize(HWnd($hWnd))
    $tRect = _GDIPlus_RectFCreate(0, 0, $aClient[0], $aClient[1])

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

    Local $tPnt = DllStructCreate("int X; int Y;")
    _WinAPI_ClientToScreen($hWnd, $tPnt)
    DllStructSetData($tRect, 1, DllStructGetData($tPnt, "X") - $aSize[0])
    DllStructSetData($tRect, 2, DllStructGetData($tPnt, "Y") - $aSize[1])

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

    DllCall($ghGDIPDll, "uint", "GdipCombineRegionRect", "hwnd", $hRegion_1, "ptr", DllStructGetPtr($tRect), "int", 3)

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

    DllCall($ghGDIPDll, "uint", "GdipCombineRegionRegion", "hwnd", $hRegion, "hwnd", $hRegion_1, "int", 2)
    DllCall($ghGDIPDll, "uint", "GdipDeleteRegion", "hwnd", $hRegion_1)

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

    Local $hGraphics = _GDIPlus_GraphicsCreateFromHWND($hWnd)
    $aResult = DllCall($ghGDIPDll, "uint", "GdipGetRegionHRgn", "hwnd", $hRegion, "hwnd", $hGraphics, "int*", 0)
    Local $hRgn = $aResult[3]
    DllCall($ghGDIPDll, "uint", "GdipDeleteRegion", "hwnd", $hRegion)

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

    DllCall('user32.dll', 'long', 'SetWindowRgn', 'hwnd', $hWnd, 'long', $hRgn, 'int', 1)
    _WinAPI_DeleteObject($hRegion)

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

    _GDIPlus_GraphicsDispose($hGraphics)
    _GDIPlus_Shutdown()
    EndFunc ;==>_SetRegion

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

    Func _Exit()
    Exit
    EndFunc ;==>_Exit

    [/autoit]
  • Hier mal der Code, um das Bild in einen Path zu packen:

    Spoiler anzeigen
    [autoit]

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

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

    Opt("GUIOnEventMode", 1)
    Opt("MustDeclareVars", 1)

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

    _GDIPlus_Startup()

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

    Global $hImage = _GDIPlus_ImageLoadFromFile(@ScriptDir & "\Tussie.png")

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

    Global $iImgW = _GDIPlus_ImageGetWidth($hImage) * 96 / _GDIPlus_ImageGetHorizontalResolution($hImage)
    Global $iImgH = _GDIPlus_ImageGetHeight($hImage) * 96 / _GDIPlus_ImageGetVerticalResolution($hImage)

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

    Global $iWidth = $iImgW
    Global $iHeight = $iImgH

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

    Global $hGui = GUICreate("Test", $iWidth, $iHeight)
    GUISetOnEvent($GUI_EVENT_CLOSE, "_Exit")
    Global $hGraphics = _GDIPlus_GraphicsCreateFromHWND($hGui)
    Global $hBmpBuffer = _GDIPlus_BitmapCreateFromGraphics($iWidth, $iHeight, $hGraphics)
    Global $hGfxBuffer = _GDIPlus_ImageGetGraphicsContext($hBmpBuffer)
    _GDIPlus_GraphicsSetSmoothingMode($hGfxBuffer, 2)
    _GDIPlus_GraphicsClear($hGfxBuffer, 0xFFFFFFFF)

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

    Global $hPen = _GDIPlus_PenCreate(0xFF00AA00)

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

    GUIRegisterMsg($WM_PAINT, "_WM_PAINT")

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

    _GDIPlus_GraphicsDrawImageRect($hGfxBuffer, $hImage, 0, 0, $iWidth, $iHeight)
    GUISetState()

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

    Global $iTimer = TimerInit()
    Global $hPath = _ScanBMP($hImage)
    ConsoleWrite("! " & TimerDiff($iTimer) & @CRLF)
    DllCall($ghGDIPDll, "uint", "GdipDrawPath", "hwnd", $hGfxBuffer, "hwnd", $hPen, "hwnd", $hPath)
    DllCall($ghGDIPDll, "uint", "GdipDeletePath", "hwnd", $hPath)
    _GDIPlus_GraphicsDrawImage($hGraphics, $hBmpBuffer, 0, 0)

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

    While Sleep(20)
    WEnd

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

    Func _ScanBMP($hBitmap)
    Local $aPixelFormat = _GDIPlus_ImageGetPixelFormat($hBitmap)
    If $aPixelFormat[0] <> $GDIP_PXF01INDEXED Then Return SetError(1, 1, False)

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

    Local $iBmpW = _GDIPlus_ImageGetWidth($hBitmap)
    Local $iBmpH = _GDIPlus_ImageGetHeight($hBitmap)

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

    Local $tData = _GDIPlus_BitmapLockBits($hBitmap, 0, 0, $iBmpW, $iBmpH, $GDIP_ILMREAD, $GDIP_PXF32ARGB)
    Local $iStride = DllStructGetData($tData, "Stride")
    Local $iWidth = DllStructGetData($tData, "Width")
    Local $iHeight = DllStructGetData($tData, "Height")
    Local $pScan0 = DllStructGetData($tData, "Scan0")
    Local $tPixel = DllStructCreate("uint[" & $iWidth * $iHeight & "];", $pScan0)

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

    Local $iRect = $iWidth * $iHeight
    Local $tRects = DllStructCreate("int[" & $iRect * 4 & "];")
    $iRect = -1

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

    Local $iOff, $iNew = 1
    Local $iRectX, $iRectW = 0
    For $y = 0 To $iHeight - 1
    $iOff = $y * $iWidth
    For $x = 0 To $iWidth - 1

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

    Switch DllStructGetData($tPixel, 1, $iOff + $x + 1)
    Case 4294967295
    $iNew = 1
    If $iRectW > 0 Then
    $iRect += 1
    DllStructSetData($tRects, 1, $iRectX, $iRect * 4 + 1)
    DllStructSetData($tRects, 1, $y, $iRect * 4 + 2)
    DllStructSetData($tRects, 1, $iRectW, $iRect * 4 + 3)
    DllStructSetData($tRects, 1, 1, $iRect * 4 + 4)
    $iRectW = 0
    EndIf

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

    Case Else
    Switch $iNew
    Case 1
    $iNew = 0
    $iRectX = $x
    $iRectW = 1
    Case Else
    $iRectW += 1
    EndSwitch

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

    EndSwitch
    Next

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

    $iNew = 1
    If $iRectW > 0 Then
    $iRect += 1
    DllStructSetData($tRects, 1, $iRectX, $iRect * 4 + 1)
    DllStructSetData($tRects, 1, $y, $iRect * 4 + 2)
    DllStructSetData($tRects, 1, $iRectW, $iRect * 4 + 3)
    DllStructSetData($tRects, 1, 1, $iRect * 4 + 4)
    $iRectW = 0
    EndIf
    Next
    $iRect += 1

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

    _GDIPlus_BitmapUnlockBits($hBitmap, $tData)

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

    Local $aResult = DllCall($ghGDIPDll, "uint", "GdipCreatePath", "int", 0, "int*", 0)
    Local $hPath = $aResult[2]
    $aResult = DllCall($ghGDIPDll, "uint", "GdipAddPathRectanglesI", "hwnd", $hPath, "ptr", DllStructGetPtr($tRects), "int", $iRect)

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

    Return $hPath
    EndFunc ;==>_ScanBMP

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

    Func _WM_PAINT($hWnd, $iMsg, $wParam, $lParam)
    _GDIPlus_GraphicsDrawImage($hGraphics, $hBmpBuffer, 0, 0)
    Return $GUI_RUNDEFMSG
    EndFunc ;==>_WM_PAINT

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

    Func _Exit()
    _GDIPlus_ImageDispose($hImage)
    _GDIPlus_PenDispose($hPen)
    _GDIPlus_GraphicsDispose($hGfxBuffer)
    _GDIPlus_BitmapDispose($hBmpBuffer)
    _GDIPlus_GraphicsDispose($hGraphics)
    _GDIPlus_Shutdown()
    Exit
    EndFunc ;==>_Exit

    [/autoit]


    Eine Region daraus erhält man wie in meinem ersten Beispiel.
    Dieser Code sollte sich auch relativ einfach in ASM umsetzen lassen...

    lgE

  • Hi

    Hier die ASM-Version:

    Spoiler anzeigen
    [autoit]

    #include <GDIPlus.au3>
    #include <GUIConstantsEx.au3>
    #include <WindowsConstants.au3>
    ;#include "ASM.au3"

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

    Global $tASM_BMPtoRect = DllStructCreate("byte[204]") ;reserve Memory for opcodes
    DllStructSetData($tASM_BMPtoRect, 1, "0x8B7424048B7C24088B54240CBB01000000660F6EFB660F70F7F3660FEFED660F70E73F660FEFDB660F6FD78B0ABB000000008B0683F8FF741D660F7ED083F8017406660FFEDFEB36660FEFD2660F6FC5660F6FDFEB28660F6FD7660F7ED883F800741B83C301660FFEC4660F70CBCF660FFEC1F30F7F0783C710660FEFDB660FFEEF660F7EE83B42047234660F6FD7660F7ED883F800741B83C301660FFEC4660F70CBCF660FFEC1F30F7F0783C710660FEFDB660FEFED660FFEE6660F6FD783C604490F8769FFFFFF891AC3") ;write opcodes into memory

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

    Opt("GUIOnEventMode", 1)
    Opt("MustDeclareVars", 1)

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

    _GDIPlus_Startup()

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

    ;Global $hImage = _GDIPlus_ImageLoadFromFile(@ScriptDir & "\10x10.bmp")
    ;Global $hImage = _GDIPlus_ImageLoadFromFile(@ScriptDir & "\Tussie.png")
    Global $hImage = _GDIPlus_ImageLoadFromFile(@ScriptDir & "\Earth.bmp")

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

    Global $iImgW = _GDIPlus_ImageGetWidth($hImage)
    Global $iImgH = _GDIPlus_ImageGetHeight($hImage)

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

    Global $fScale = 1
    Global $iWidth = $iImgW * $fScale
    Global $iHeight = $iImgH * $fScale

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

    Global $hGui = GUICreate("Test", $iWidth, $iHeight)
    GUISetOnEvent($GUI_EVENT_CLOSE, "_Exit")
    GUISetBkColor(0xC00000, $hGui)
    GUISetState()

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

    Global $iTimer = TimerInit()
    _Perforate($hGui, $hImage, $fScale)
    ConsoleWrite("! " & TimerDiff($iTimer) & @CRLF)

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

    While Sleep(10)
    WEnd

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

    Func _Perforate($hWnd, $hBitmap, $fScale = 1)
    ;Local $hPath = _BMPtoPath($hImage)
    Local $hPath = _BMPtoPathASM($hImage)
    If @error Then Return SetError(@error, 1, False)

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

    Local $hMatrix = _GDIPlus_MatrixCreate()
    _GDIPlus_MatrixScale($hMatrix, $fScale, $fScale)
    _GDIPlus_MatrixTranslate($hMatrix, _WinAPI_GetSystemMetrics(7), _WinAPI_GetSystemMetrics(8) + _WinAPI_GetSystemMetrics($SM_CYSIZE) + 1, 1)
    DllCall($ghGDIPDll, "uint", "GdipTransformPath", "hwnd", $hPath, "hwnd", $hMatrix)
    _GDIPlus_MatrixDispose($hMatrix)

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

    Local $aResult = DllCall($ghGDIPDll, "uint", "GdipCreateRegionPath", "hwnd", $hPath, "int*", 0)
    Local $hRegion = $aResult[2]
    DllCall($ghGDIPDll, "uint", "GdipDeletePath", "hwnd", $hPath)

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

    Local $aSize = WinGetPos(HWnd($hWnd))
    Local $tRect = _GDIPlus_RectFCreate(0, 0, $aSize[2], $aSize[3])
    $aResult = DllCall($ghGDIPDll, "uint", "GdipCreateRegionRect", "ptr", DllStructGetPtr($tRect), "int*", 0)
    Local $hRegion_1 = $aResult[2]

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

    Local $aClient = WinGetClientSize(HWnd($hWnd))
    $tRect = _GDIPlus_RectFCreate(0, 0, $aClient[0], $aClient[1])

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

    Local $tPnt = DllStructCreate("int X; int Y;")
    _WinAPI_ClientToScreen($hWnd, $tPnt)
    DllStructSetData($tRect, 1, DllStructGetData($tPnt, "X") - $aSize[0])
    DllStructSetData($tRect, 2, DllStructGetData($tPnt, "Y") - $aSize[1])

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

    DllCall($ghGDIPDll, "uint", "GdipCombineRegionRect", "hwnd", $hRegion_1, "ptr", DllStructGetPtr($tRect), "int", 3)

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

    DllCall($ghGDIPDll, "uint", "GdipCombineRegionRegion", "hwnd", $hRegion, "hwnd", $hRegion_1, "int", 2)
    DllCall($ghGDIPDll, "uint", "GdipDeleteRegion", "hwnd", $hRegion_1)

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

    Local $hGraphics = _GDIPlus_GraphicsCreateFromHWND($hWnd)
    $aResult = DllCall($ghGDIPDll, "uint", "GdipGetRegionHRgn", "hwnd", $hRegion, "hwnd", $hGraphics, "int*", 0)
    Local $hRgn = $aResult[3]
    DllCall($ghGDIPDll, "uint", "GdipDeleteRegion", "hwnd", $hRegion)

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

    DllCall('user32.dll', 'long', 'SetWindowRgn', 'hwnd', $hWnd, 'long', $hRgn, 'int', 1)
    _WinAPI_DeleteObject($hRegion)

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

    _GDIPlus_GraphicsDispose($hGraphics)

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

    EndFunc ;==>_Perforate

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

    Func _BMPtoPathASM($hBitmap)
    Local $aPixelFormat = _GDIPlus_ImageGetPixelFormat($hBitmap)
    If $aPixelFormat[0] <> $GDIP_PXF01INDEXED Then Return SetError(1, 1, False)

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

    Local $iBmpW = _GDIPlus_ImageGetWidth($hBitmap)
    Local $iBmpH = _GDIPlus_ImageGetHeight($hBitmap)

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

    Local $tData = _GDIPlus_BitmapLockBits($hBitmap, 0, 0, $iBmpW, $iBmpH, $GDIP_ILMREAD, $GDIP_PXF32ARGB)
    Local $iStride = DllStructGetData($tData, "Stride")
    Local $iWidth = DllStructGetData($tData, "Width")
    Local $iHeight = DllStructGetData($tData, "Height")
    Local $pScan0 = DllStructGetData($tData, "Scan0")

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

    Local $iRect = $iWidth * $iHeight
    Local $tRects = DllStructCreate("int[" & $iRect * 4 & "];")

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

    Local $tVal = DllStructCreate("uint Cnt; uint W;")
    DllStructSetData($tVal, "Cnt", $iWidth * $iHeight)
    DllStructSetData($tVal, "W", $iWidth)

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

    ;$_ASSEMBLEIT_FLAG = 0
    ;_AssembleIt("none", "_ASM_BMPtoRECT", "ptr", $pScan0, "ptr", DllStructGetPtr($tRects), "ptr", DllStructGetPtr($tVal))
    DllCall("user32.dll", "none", "CallWindowProcW", "ptr", DllStructGetPtr($tASM_BMPtoRect), "ptr", $pScan0, "ptr", DllStructGetPtr($tRects), "ptr", DllStructGetPtr($tVal), "int", 0)

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

    _GDIPlus_BitmapUnlockBits($hBitmap, $tData)

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

    $iRect = DllStructGetData($tVal, "Cnt")

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

    Local $aResult = DllCall($ghGDIPDll, "uint", "GdipCreatePath", "int", 0, "int*", 0)
    Local $hPath = $aResult[2]
    $aResult = DllCall($ghGDIPDll, "uint", "GdipAddPathRectanglesI", "hwnd", $hPath, "ptr", DllStructGetPtr($tRects), "int", $iRect)

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

    Return $hPath
    EndFunc ;==>_BMPtoPathASM

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

    Func _BMPtoPath($hBitmap)
    Local $aPixelFormat = _GDIPlus_ImageGetPixelFormat($hBitmap)
    If $aPixelFormat[0] <> $GDIP_PXF01INDEXED Then Return SetError(1, 1, False)

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

    Local $iBmpW = _GDIPlus_ImageGetWidth($hBitmap)
    Local $iBmpH = _GDIPlus_ImageGetHeight($hBitmap)

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

    Local $tData = _GDIPlus_BitmapLockBits($hBitmap, 0, 0, $iBmpW, $iBmpH, $GDIP_ILMREAD, $GDIP_PXF32ARGB)
    Local $iStride = DllStructGetData($tData, "Stride")
    Local $iWidth = DllStructGetData($tData, "Width")
    Local $iHeight = DllStructGetData($tData, "Height")
    Local $pScan0 = DllStructGetData($tData, "Scan0")
    Local $tPixel = DllStructCreate("uint[" & $iWidth * $iHeight & "];", $pScan0)

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

    Local $iRect = $iWidth * $iHeight
    Local $tRects = DllStructCreate("int[" & $iRect * 4 & "];")
    $iRect = -1

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

    Local $iOff, $iNew = 1, $iIdx
    Local $iRectX, $iRectW = 0
    For $y = 0 To $iHeight - 1
    $iOff = $y * $iWidth
    For $x = 0 To $iWidth - 1

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

    Switch DllStructGetData($tPixel, 1, $iOff + $x + 1)
    Case 4294967295;0xFFFFFFFF
    $iNew = 1
    If $iRectW > 0 Then
    $iRect += 1
    $iIdx = $iRect * 4
    DllStructSetData($tRects, 1, $iRectX, $iIdx + 1)
    DllStructSetData($tRects, 1, $y, $iIdx + 2)
    DllStructSetData($tRects, 1, $iRectW, $iIdx + 3)
    DllStructSetData($tRects, 1, 1, $iIdx + 4)
    $iRectW = 0
    EndIf

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

    Case Else
    Switch $iNew
    Case 1
    $iNew = 0
    $iRectX = $x
    $iRectW = 1
    Case Else
    $iRectW += 1
    EndSwitch

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

    EndSwitch
    Next

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

    $iNew = 1
    If $iRectW > 0 Then
    $iRect += 1
    $iIdx = $iRect * 4
    DllStructSetData($tRects, 1, $iRectX, $iIdx + 1)
    DllStructSetData($tRects, 1, $y, $iIdx + 2)
    DllStructSetData($tRects, 1, $iRectW, $iIdx + 3)
    DllStructSetData($tRects, 1, 1, $iIdx + 4)
    $iRectW = 0
    EndIf
    Next
    $iRect += 1

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

    _GDIPlus_BitmapUnlockBits($hBitmap, $tData)

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

    Local $aResult = DllCall($ghGDIPDll, "uint", "GdipCreatePath", "int", 0, "int*", 0)
    Local $hPath = $aResult[2]
    $aResult = DllCall($ghGDIPDll, "uint", "GdipAddPathRectanglesI", "hwnd", $hPath, "ptr", DllStructGetPtr($tRects), "int", $iRect)

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

    Return $hPath
    EndFunc ;==>_BMPtoPath

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

    Func _Exit()
    _GDIPlus_ImageDispose($hImage)
    _GDIPlus_Shutdown()
    Exit
    EndFunc ;==>_Exit

    [/autoit]

    ASM.au3:

    Spoiler anzeigen
    [autoit]

    #include <AssembleIt.au3>

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

    Func _ASM_BMPtoRECT()
    _("use32") ;32Bit!

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

    _("mov esi, dword[esp+4]") ;Scan0
    _("mov edi, dword[esp+8]") ;Rects
    _("mov edx, dword[esp+12]") ;Val

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

    _("mov ebx, 1")
    _("movd xmm7, ebx") ;1,0,0,0
    _("pshufd xmm6, xmm7, 0xF3") ;0,1,0,0
    _("pxor xmm5, xmm5") ;0,0,0,0
    _("pshufd xmm4, xmm7, 0x3F") ;0,0,0,1
    _("pxor xmm3, xmm3") ;0,0,0,0
    _("movdqa xmm2, xmm7") ;1,0,0,0

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

    ;xmm7 = 1,0,0,0 = add X
    ;xmm6 = 0,1,0,0 = add Y
    ;xmm5 = 0,0,0,0 = XPos
    ;xmm4 = 0,0,0,1 = YPos (incl. RectH = 1)
    ;xmm3 = 0,0,0,0 = RectW
    ;xmm2 = 1,0,0,0 = New
    ;xmm1 = shuffle RectW
    ;xmm0 = 0,0,0,0 = Save

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

    _("mov ecx, [edx]") ;PixelCount
    _("mov ebx, 0") ;RectCount
    _("_Loop:")

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

    _("mov eax, [esi]") ;load Pixel
    _("cmp eax, 0xFFFFFFFF")
    _("je _Trans")
    _("_Full:")
    _("movd eax, xmm2")
    _("cmp eax, 1") ;New = 1?
    _("je _NewRect")
    _("_ContRect:")
    _("paddd xmm3, xmm7") ;RectW += 1
    _("jmp _FullCont")

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

    _("_NewRect:")
    _("pxor xmm2, xmm2") ;New = 0
    _("movdqa xmm0, xmm5") ;RectX = XPos
    _("movdqa xmm3, xmm7") ;RectW = 1

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

    _("jmp _FullCont")

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

    _("_Trans:")
    _("movdqa xmm2, xmm7") ;New = 1

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

    _("movd eax, xmm3")
    _("cmp eax, 0") ;RectW > 0
    _("je _NoWrite")
    _("_Write:")
    _("add ebx, 1")
    ;Xmm0 = XPos, 0, 0, 0
    _("paddd xmm0, xmm4") ;Add 0, YPos, 0, 1
    _("pshufd xmm1, xmm3, 0xCF") ;RectW -> xmm1 0,0,RectW,0
    _("paddd xmm0, xmm1") ;Add 0, 0, RectW, 0

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

    _("movdqu [edi], xmm0")
    _("add edi, 16")
    _("pxor xmm3, xmm3") ;RectW = 0

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

    _("_NoWrite:")

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

    _("_FullCont:")

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

    _("paddd xmm5, xmm7") ;XPos += 1
    _("movd eax, xmm5")
    _("cmp eax, [edx+4]") ;XPos > Width
    _("jb _SameLine")
    _("_NewLine:")
    _("movdqa xmm2, xmm7") ;New = 1

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

    _("movd eax, xmm3")
    _("cmp eax, 0") ;RectW > 0
    _("je _NoWrite1")
    _("_Write1:")
    _("add ebx, 1") ;RectCount += 1
    ;Xmm0 = XPos, 0, 0, 0
    _("paddd xmm0, xmm4") ;Add 0, YPos, 0, 1
    _("pshufd xmm1, xmm3, 0xCF")
    _("paddd xmm0, xmm1") ;Add 0, 0, RectW, 0

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

    _("movdqu [edi], xmm0")
    _("add edi, 16")
    _("pxor xmm3, xmm3") ;RectW = 0

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

    _("_NoWrite1:")

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

    _("pxor xmm5, xmm5") ;XPos = 0
    _("paddd xmm4, xmm6") ;YPos += 1
    _("movdqa xmm2, xmm7") ;New = 1

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

    _("_SameLine:")

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

    _("add esi, 4")
    _("dec ecx")
    _("ja _Loop")

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

    _("mov [edx], ebx") ;Save RectCount
    _("ret ") ;return
    EndFunc ;==>_ASM_BMPtoRECT

    [/autoit]

    autoit.de/wcf/attachment/19802/

    Der Code fasst alle nebeneinanderliegene Pixel in einer Zeile zu einem Rechteck(Höhe 1) zusammen.
    Besser wäre es natürlich, wenn man auch Zeilenübergreifend zusammen fassen würde, denn je weniger Daten in einer Region sind, desto flüssiger läuft es.

    Bei zuvielen Rechtecken kann auch schonmal der PC abkacken...

    lgE

  • Da habe ich dich auf was heiß gemacht...

    In der Tat ;)

    Der Zeilenübergreifende Algo war einfacher als erwartet:

    Spoiler anzeigen
    [autoit]

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

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

    Opt("GUIOnEventMode", 1)
    Opt("MustDeclareVars", 1)

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

    _GDIPlus_Startup()

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

    ;Global $hImage = _GDIPlus_ImageLoadFromFile(@ScriptDir & "\30x30.bmp")
    Global $hImage = _GDIPlus_ImageLoadFromFile(@ScriptDir & "\Tussie.png")
    ;Global $hImage = _GDIPlus_ImageLoadFromFile(@ScriptDir & "\earth.bmp")

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

    Global $iImgW = _GDIPlus_ImageGetWidth($hImage)
    Global $iImgH = _GDIPlus_ImageGetHeight($hImage)

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

    Global $fScale = 1.8

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

    Global $iWidth = $iImgW * $fScale
    Global $iHeight = $iImgH * $fScale

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

    Global $hGui = GUICreate("Test", $iWidth, $iHeight)
    GUISetOnEvent($GUI_EVENT_CLOSE, "_Exit")
    Global $hGraphics = _GDIPlus_GraphicsCreateFromHWND($hGui)
    Global $hBmpBuffer = _GDIPlus_BitmapCreateFromGraphics($iWidth, $iHeight, $hGraphics)
    Global $hGfxBuffer = _GDIPlus_ImageGetGraphicsContext($hBmpBuffer)
    _GDIPlus_GraphicsSetSmoothingMode($hGfxBuffer, 2)
    DllCall($ghGDIPDll, "uint", "GdipSetInterpolationMode", "hwnd", $hGfxBuffer, "int", 5)
    DllCall($ghGDIPDll, "uint", "GdipSetPixelOffsetMode", "hwnd", $hGfxBuffer, "int", 2)
    _GDIPlus_GraphicsClear($hGfxBuffer, 0xFFFFFFFF)

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

    Global $hPen = _GDIPlus_PenCreate(0xFF00FF00, 1)
    Global $hBrush = _GDIPlus_BrushCreateSolid(0x88FF0000)

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

    GUIRegisterMsg($WM_PAINT, "_WM_PAINT")

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

    _GDIPlus_GraphicsDrawImageRect($hGfxBuffer, $hImage, 0, 0, $iWidth, $iHeight)
    GUISetState()

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

    Global $iTimer = TimerInit()
    Global $hPath = _ScanBMP($hImage, $fScale, 0)
    ConsoleWrite("! " & TimerDiff($iTimer) & @CRLF)
    DllCall($ghGDIPDll, "uint", "GdipFillPath", "hwnd", $hGfxBuffer, "hwnd", $hBrush, "hwnd", $hPath)
    DllCall($ghGDIPDll, "uint", "GdipDrawPath", "hwnd", $hGfxBuffer, "hwnd", $hPen, "hwnd", $hPath)

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

    DllCall($ghGDIPDll, "uint", "GdipDeletePath", "hwnd", $hPath)
    _GDIPlus_GraphicsDrawImage($hGraphics, $hBmpBuffer, 0, 0)

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

    While Sleep(10)
    WEnd

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

    Func _ScanBMP($hBitmap, $fScale = 1, $iMin = 0)
    Local $aPixelFormat = _GDIPlus_ImageGetPixelFormat($hBitmap)
    If $aPixelFormat[0] <> $GDIP_PXF01INDEXED Then Return SetError(1, 1, False)

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

    Local $iBmpW = _GDIPlus_ImageGetWidth($hBitmap)
    Local $iBmpH = _GDIPlus_ImageGetHeight($hBitmap)

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

    Local $tData = _GDIPlus_BitmapLockBits($hBitmap, 0, 0, $iBmpW, $iBmpH, $GDIP_ILMREAD, $GDIP_PXF32ARGB)
    Local $iStride = DllStructGetData($tData, "Stride")
    Local $iWidth = DllStructGetData($tData, "Width")
    Local $iHeight = DllStructGetData($tData, "Height")

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

    Local $tScan0 = DllStructCreate("byte[" & $iWidth * $iHeight * 4 & "];", DllStructGetData($tData, "Scan0"))
    Local $tPixel = DllStructCreate("uint[" & $iWidth * $iHeight & "];")
    Local $tSet = DllStructCreate("byte[" & DllStructGetSize($tPixel) & "];", DllStructGetPtr($tPixel))
    DllStructSetData($tSet, 1, DllStructGetData($tScan0, 1))
    _GDIPlus_BitmapUnlockBits($hBitmap, $tData)

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

    Local $iRect = 0
    Local $tRects = DllStructCreate("uint[" & $iWidth * $iHeight * 4 & "];")

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

    Local $iOff, $iPos
    Local $iRectX1, $iRectY1, $iRectX2, $iRectY2
    Local $iTmpX1, $iTmpY1, $iTmpX2, $iTmpY2
    For $y = 0 To $iHeight - 1
    $iOff = $y * $iWidth
    For $x = 0 To $iWidth - 1

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

    While DllStructGetData($tPixel, 1, $iOff + $x + 1) = 4278190080

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

    $iPos = $iOff + $x
    $iTmpX1 = 0
    While $x + $iTmpX1 < $iWidth
    $iTmpX1 += 1
    $iPos += 1
    If DllStructGetData($tPixel, 1, $iPos + 1) <> 4278190080 Then
    ExitLoop
    EndIf
    WEnd
    $iTmpX1 = BitShift($iTmpX1, 1)

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

    $iPos = $iOff + $x + $iTmpX1
    $iTmpY1 = 0
    While $y + $iTmpY1 < $iHeight
    $iTmpY1 += 1
    $iPos += $iWidth
    If DllStructGetData($tPixel, 1, $iPos + 1) <> 4278190080 Then
    ExitLoop
    EndIf
    WEnd
    $iTmpY1 = BitShift($iTmpY1, 1)

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

    $iRectX1 = $x + $iTmpX1
    $iRectY1 = $y + $iTmpY1
    $iRectX2 = $iRectX1
    $iRectY2 = $iRectY1

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

    While 1
    $iTmpX1 = $iRectX1
    $iTmpY1 = $iRectY1
    $iTmpX2 = $iRectX2
    $iTmpY2 = $iRectY2

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

    ;Test RectX1 -= 1
    If $iRectX1 > 0 Then
    ;?####
    ;?####
    ;?####
    $iRectX1 -= 1
    $iPos = $iRectY1 * $iWidth + $iRectX1
    For $i = $iRectY1 To $iRectY2
    If DllStructGetData($tPixel, 1, $iPos + 1) <> 4278190080 Then
    $iRectX1 = $iTmpX1
    ExitLoop
    EndIf
    $iPos += $iWidth ;Nächste Zeile
    Next
    EndIf

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

    ;Test RectY1 -= 1
    If $iRectY1 > 0 Then
    ;?????
    ;#####
    ;#####
    $iRectY1 -= 1
    $iPos = $iRectY1 * $iWidth + $iRectX1
    For $i = $iRectX1 To $iRectX2
    If DllStructGetData($tPixel, 1, $iPos + 1) <> 4278190080 Then
    $iRectY1 = $iTmpY1
    ExitLoop
    EndIf
    $iPos += 1 ;Nächster Pixel
    Next
    EndIf

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

    ;Test RectX2 += 1
    If $iRectX2 < $iWidth Then
    ;####?
    ;####?
    ;####?
    $iRectX2 += 1
    $iPos = $iRectY1 * $iWidth + $iRectX2
    For $i = $iRectY1 To $iRectY2
    If DllStructGetData($tPixel, 1, $iPos + 1) <> 4278190080 Then
    $iRectX2 = $iTmpX2
    ExitLoop
    EndIf
    $iPos += $iWidth ;Nächste Zeile
    Next
    EndIf

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

    ;Test RectY2 += 1
    If $iRectY2 < $iHeight Then
    ;#####
    ;#####
    ;?????
    $iRectY2 += 1
    $iPos = $iRectY2 * $iWidth + $iRectX1
    For $i = $iRectX1 To $iRectX2
    If DllStructGetData($tPixel, 1, $iPos + 1) <> 4278190080 Then
    $iRectY2 = $iTmpY2
    ExitLoop
    EndIf
    $iPos += 1 ;Nächster Pixel
    Next
    EndIf

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

    If $iRectX1 = $iTmpX1 And $iRectX2 = $iTmpX2 And $iRectY1 = $iTmpY1 And $iRectY2 = $iTmpY2 Then ExitLoop
    WEnd

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

    ConsoleWrite("> Rect: " & $iRectX1 & " " & $iRectY1 & " " & $iRectX2 - $iRectX1 + 1 & " " & $iRectY2 - $iRectY1 + 1 & @CRLF)

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

    For $j = $iRectY1 To $iRectY2
    $iPos = $j * $iWidth
    For $i = $iRectX1 To $iRectX2
    DllStructSetData($tPixel, 1, 0, $iPos + $i + 1)
    Next
    Next

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

    $iTmpX1 = $iRectX2 - $iRectX1 + 1
    $iTmpY1 = $iRectY2 - $iRectY1 + 1
    If $iTmpX1 > $iMin Or $iTmpY1 > $iMin Then
    DllStructSetData($tRects, 1, $iRectX1, $iRect * 4 + 1)
    DllStructSetData($tRects, 1, $iRectY1, $iRect * 4 + 2)
    DllStructSetData($tRects, 1, $iTmpX1, $iRect * 4 + 3)
    DllStructSetData($tRects, 1, $iTmpY1, $iRect * 4 + 4)
    $iRect += 1
    EndIf
    WEnd

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

    Next
    Next

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

    Local $aResult = DllCall($ghGDIPDll, "uint", "GdipCreatePath", "int", 0, "int*", 0)
    Local $hPath = $aResult[2]
    $aResult = DllCall($ghGDIPDll, "uint", "GdipAddPathRectanglesI", "hwnd", $hPath, "ptr", DllStructGetPtr($tRects), "int", $iRect)

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

    $aResult = DllCall($ghGDIPDll, "uint", "GdipGetPointCount", "hwnd", $hPath, "int*", 0)
    ConsoleWrite("! Path Pnt: " & $aResult[2] & @CRLF)

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

    Local $hMatrix = _GDIPlus_MatrixCreate()
    _GDIPlus_MatrixScale($hMatrix, $fScale, $fScale)
    DllCall($ghGDIPDll, "uint", "GdipTransformPath", "hwnd", $hPath, "hwnd", $hMatrix)
    _GDIPlus_MatrixDispose($hMatrix)

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

    ConsoleWrite("! iRect: " & $iRect & @CRLF & @CRLF)

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

    Return $hPath
    EndFunc ;==>_ScanBMP

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

    Func _WM_PAINT($hWnd, $iMsg, $wParam, $lParam)
    _GDIPlus_GraphicsDrawImage($hGraphics, $hBmpBuffer, 0, 0)
    Return $GUI_RUNDEFMSG
    EndFunc ;==>_WM_PAINT

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

    Func _Exit()
    _GDIPlus_ImageDispose($hImage)
    _GDIPlus_PenDispose($hPen)
    _GDIPlus_BrushDispose($hBrush)
    _GDIPlus_GraphicsDispose($hGfxBuffer)
    _GDIPlus_BitmapDispose($hBmpBuffer)
    _GDIPlus_GraphicsDispose($hGraphics)
    _GDIPlus_Shutdown()
    Exit
    EndFunc ;==>_Exit

    [/autoit]

    Die Anzahl der Rechtecke lässt sich massiv reduzieren.
    Zudem kann man nun auch angeben, ab welcher Größe ein Rechteck überhaupt verwendet werden soll.

    Die Umsetzung in ASM scheint mir aber doch etwas zu kompliziert :rolleyes:
    In FreeBasic sollte es aber relativ einfach sein...

    E

  • Die Idee hatte ich auch, dass man durch geschickte Rechtecke die Punkte massive verkleinern kann, aber wusste nicht, wie ich das umsetzen kann.

    Da sieht man, wer der Chef im Ring ist. :thumbup:

    Zur Zeit kämpfe ich mit einer Grippe, d.h. mein Hirn schaltet sehr langsam, wenn überhaupt.

    Ziel der Übung ist es, das perforierte Bild irgendwo auf die GUI zu platzieren, neben anderen GUI Kontrollelementen.

    Vielen Dank eukalyptus!

    Gruß,
    UEZ

    Auch am Arsch geht ein Weg vorbei...

    ¯\_(ツ)_/¯