Hi,
habe ein, zumindestens für mich, seltsamens Problem. In folgendem Script lade ich zu beginn eine Bild in einer globale Variable:
[autoit]Global $char = _GDIPlus_ImageLoadFromFile(@ScriptDir & "\chars\1.png")
[/autoit]aus dieem Bild werden dann in einer Funktion mit "_GDIPlus_GraphicsDrawImageRectRect" einzelnen Bereiche ausgeschnitten und vergößert dargestellt. Soweit so gut. Jetzt habe ich allerdings drin, dass wenn eine Variable einen bestimmten Wert erreicht ein anderes Bild in die globale Variable geladen werden soll:
[autoit]If $charselectkordy == 64 Then
$charselectkordy = 192
Else
$charselectkordy = 64
$chardateicount = $chardateicount + 1
$char = _GDIPlus_ImageLoadFromFile(@ScriptDir & "\chars\" & $chardateicount & ".png")
EndIf
Und nun kommt das komische. Beim diekt drauffolgenden "_GDIPlus_GraphicsDrawImageRectRect" wird aus dem neuen Bild der Ausschnitt genommen. Beim nächsten aufrufen der Funktion allerdings wieder von dem alten obwohl das garnichtmehr in die Variable geladen wird.
Spoiler anzeigen
#include <File.au3>
#include <GDIPlus.au3>
#include <GUIConstantsEx.au3>
Opt("GuiOnEventMode", 1)
[/autoit] [autoit][/autoit] [autoit]OnAutoItExitRegister("_end")
[/autoit] [autoit][/autoit] [autoit]$Gui = GUICreate("Form1", 320, 240)
GUISetOnEvent($GUI_EVENT_CLOSE, "CLOSEClicked")
$charselectleft = GUICtrlCreateLabel("", 80, 180, 34, 25, 0x0000000D)
GUICtrlSetOnEvent($charselectleft, "charselectleft")
$charselectright = GUICtrlCreateLabel("", 195, 180, 34, 25, 0x0000000D)
GUICtrlSetOnEvent($charselectright, "charselectright")
GUISetState(@SW_SHOW)
$chardateien = _FileListToArray(@ScriptDir & "\chars")
[/autoit] [autoit][/autoit] [autoit]_GDIPlus_Startup()
[/autoit] [autoit][/autoit] [autoit]$graphic = _GDIPlus_GraphicsCreateFromHWND($Gui)
$bitmap = _GDIPlus_BitmapCreateFromGraphics(320, 240, $graphic)
$buffer = _GDIPlus_ImageGetGraphicsContext($bitmap)
Global $char = _GDIPlus_ImageLoadFromFile(@ScriptDir & "\chars\1.png")
$height = _GDIPlus_ImageGetHeight($char)
$width = _GDIPlus_ImageGetWidth($char)
$bk = _GDIPlus_ImageLoadFromFile("charselect.png")
[/autoit] [autoit][/autoit] [autoit]$changeright = _GDIPlus_ImageLoadFromFile("auswahlrechts.png")
[/autoit] [autoit][/autoit] [autoit]$changeleft = _GDIPlus_ImageLoadFromFile("auswahllinks.png")
[/autoit] [autoit][/autoit] [autoit][/autoit] [autoit]Global $charselectkordx = 0
Global $charselectkordy = 0
Global $chardateicount = 1
_charchange($buffer, $bk, $char, $graphic, $bitmap)
While 1
[/autoit] [autoit][/autoit] [autoit]WEnd
[/autoit] [autoit][/autoit] [autoit]Func charselectleft()
_charchange($buffer, $bk, $char, $graphic, $bitmap, "left")
EndFunc ;==>charselectleft
Func charselectright()
_charchange($buffer, $bk, $char, $graphic, $bitmap, "right")
EndFunc ;==>charselectright
Func CLOSEClicked()
Exit
EndFunc ;==>CLOSEClicked
Func _charchange($buffer, $bk, $char, $graphic, $bitmap, $direction = "start")
Switch $direction
Case "start"
$charselectkordx = 24
$charselectkordy = 64
Case "left"
$charselectkordx = $charselectkordx - 72
If $charselectkordx < 24 Then
If $charselectkordy == 64 Then
$charselectkordy = 192
Else
$charselectkordy = 64
EndIf
$charselectkordx = 240
EndIf
Case "right"
$charselectkordx = $charselectkordx + 72
If $charselectkordx > 240 Then
If $charselectkordy == 64 Then
$charselectkordy = 192
Else
$charselectkordy = 64
$chardateicount = $chardateicount + 1
$char = _GDIPlus_ImageLoadFromFile(@ScriptDir & "\chars\" & $chardateicount & ".png")
EndIf
$charselectkordx = 24
EndIf
EndSwitch
_GDIPlus_GraphicsDrawImageRect($buffer, $bk, 0, 0, 320, 240)
_GDIPlus_GraphicsDrawImageRect($buffer, $changeleft, 80, 180, 34, 25)
_GDIPlus_GraphicsDrawImageRect($buffer, $changeright, 195, 180, 34, 25)
_GDIPlus_GraphicsDrawImageRectRect($buffer, $char, $charselectkordx, $charselectkordy, 24, 32, 120, 110, 24 * 3, 32 * 3)
_GDIPlus_GraphicsDrawImage($graphic, $bitmap, 0, 0)
_GDIPlus_GraphicsClear($buffer, 0xFF000000)
EndFunc ;==>_charchange
Func _end()
_GDIPlus_GraphicsDispose($graphic)
_GDIPlus_GraphicsDispose($buffer)
_GDIPlus_BitmapDispose($bitmap)
_GDIPlus_ImageDispose($char)
_GDIPlus_ImageDispose($bk)
_GDIPlus_Shutdown()
EndFunc ;==>_end