Hallo!
Hier mein neuestes Skript.
Make PicInclude.au3
#include <GDIPlus.au3>
[/autoit] [autoit][/autoit] [autoit]Local $iMsg = MsgBox(36, 'Datei auswählen?', 'Möchten Sie eine Datei auswählen?')
Local $picfile = ""
If $iMsg = 6 Then
$picfile = FileOpenDialog('Bild auswählen', @ScriptDir, 'Bilder (*.jpg;*.bmp)')
Local $array = _Scan_Pic($picfile)
Else
Local $array = _Scan_Pic($picfile, 100, 50, 200, 200)
EndIf
Local $string = _Array2dToString($array)
Local $file = @ScriptDir & '\IncludePic\IncludePic' & @YEAR & @MON & @MDAY & @HOUR & @MIN & @SEC & '.au3'
Local $Funcfile = @ScriptDir & '\IncludePic\IncludePicFunc.au3'
ClipPut('#include "' & $file & '"' & @CRLF)
Local $hFuncfile = FileOpen($Funcfile, 10)
FileWriteLine($hFuncfile, '#include-once')
FileWriteLine($hFuncfile, '')
FileWriteLine($hFuncfile, 'Func _StringToArray2D($sArray)')
FileWriteLine($hFuncfile, ' ;funkey')
FileWriteLine($hFuncfile, ' Local $i_extended, $ar_Row, $ar = StringSplit($sArray, @LF, 2)')
FileWriteLine($hFuncfile, ' StringReplace($ar[0], "|", @LF)')
FileWriteLine($hFuncfile, ' $i_extended = @extended + 1')
FileWriteLine($hFuncfile, ' Local $ar2D[$i_extended][UBound($ar)]')
FileWriteLine($hFuncfile, ' For $i = 0 To UBound($ar2D, 2) - 1')
FileWriteLine($hFuncfile, ' $ar_Row = StringSplit($ar[$i], "|", 2)')
FileWriteLine($hFuncfile, ' For $j = 0 To UBound($ar2D, 1) - 1')
FileWriteLine($hFuncfile, ' $ar2D[$j][$i] = $ar_Row[$j]')
FileWriteLine($hFuncfile, ' Next')
FileWriteLine($hFuncfile, ' Next')
FileWriteLine($hFuncfile, ' Return $ar2D')
FileWriteLine($hFuncfile, 'EndFunc ;==>_StringToArray2D')
FileClose($hFuncfile)
Local $hfile = FileOpen($file, 10)
FileWriteLine($hfile, '#include <' & $Funcfile & '>')
FileWriteLine($hfile, '')
FileWriteLine($hfile, "Local $sPic = ''")
FileWriteLine($hfile, StringTrimRight("$sPic &= '" & StringReplace($string, @LF, "' & @LF" & @LF & "$sPic &= '"), 17))
FileWriteLine($hfile, '')
FileWriteLine($hfile, 'Local $aPic = _StringToArray2D($sPic)')
FileWriteLine($hfile, '')
FileWriteLine($hfile, 'Local $LastCol = ""')
FileWriteLine($hfile, 'For $j = 0 To UBound($aPic, 2) - 1')
FileWriteLine($hfile, ' For $i = 0 To UBound($aPic, 1) - 1')
FileWriteLine($hfile, ' If $aPic[$i][$j] = "" Then ContinueLoop')
FileWriteLine($hfile, ' If $LastCol <> $aPic[$i][$j] Then')
FileWriteLine($hfile, ' GUICtrlSetGraphic(-1, 8, $aPic[$i][$j])')
FileWriteLine($hfile, ' $LastCol = $aPic[$i][$j]')
FileWriteLine($hfile, ' EndIf')
FileWriteLine($hfile, ' GUICtrlSetGraphic(-1, 18, $i, $j)')
FileWriteLine($hfile, ' Next')
FileWriteLine($hfile, 'Next')
FileClose($hfile)
MsgBox(64, 'Fertig', 'Die "IncludePic-Datei" wurde erfolgreich erstellt!' & @CRLF & 'Das Ergebnis wurde in die Zwischenablage kopiert.')
[/autoit] [autoit][/autoit] [autoit]Func _Scan_Pic($sSource, $iPosx = -1, $iPosy = -1, $iWidth = -1, $iHeight = -1)
;funkey
If FileExists($sSource) Then
_GDIPlus_Startup()
Local $IMAGE = _GDIPlus_ImageLoadFromFile($sSource)
$iWidth = _GDIPlus_ImageGetWidth($IMAGE)
$iHeight = _GDIPlus_ImageGetHeight($IMAGE)
_GDIPlus_ImageDispose($IMAGE)
Local $GUI = GUICreate('Bild', $iWidth, $iHeight, -1, -1, 0x80000000)
GUISetBkColor(0xFFFFFF)
Local $PICTURE = GUICtrlCreatePic($sSource, 0, 0, $iWidth, $iHeight)
GUISetState(@SW_SHOW, $GUI)
Local $WinPos = WinGetPos('Bild')
$iPosx = $WinPos[0]
$iPosy = $WinPos[1]
EndIf
Local $aPic[$iWidth][$iHeight]
For $j = 0 To $iHeight - 1
For $i = 0 To $iWidth - 1
$aPic[$i][$j] = PixelGetColor($iPosx + $i, $iPosy + $j)
Next
Next
Return $aPic
EndFunc ;==>_Scan_Pic
Func _Array2dToString($ar2D)
;funkey
Local $sMsg = ""
For $yCounter = 0 To UBound($ar2D, 2) - 1
For $xCounter = 0 To UBound($ar2D) - 1
$sMsg &= $ar2D[$xCounter][$yCounter] & '|'
Next
$sMsg = StringTrimRight($sMsg, 1) & @LF
Next
Return $sMsg
EndFunc ;==>_Array2dToString
Dieser Code erzeugt aus einer Bild-Datei oder direkt von der Bildschirmanzeige eine Datei, die einfach nach einem GUICtrlCreateGraphic includet wird. In die Zwischenablage wird dann '#include ...' geschrieben.
Fertiges Skript sieht dann im einfachsten Fall so aus:
Spoiler anzeigen
GUICreate("Pic-Include-Test", 500, 500)
[/autoit] [autoit][/autoit] [autoit]GUICtrlCreateGraphic(0, 0) ; <--Position des Bildes festlegen
#include "C:\Dokumente und Einstellungen\.....\Desktop\IncludePic\IncludePic20090706130040.au3" ; <---hier den Include aus der Zwischenablage einfügen
GUISetState()
[/autoit] [autoit][/autoit] [autoit]Do
Until GUIGetMsg() = -3
Die Bilder dürfen nicht zu groß sein (max. ca. 200x200) , ansonsten läuft das Skript bei mir super. Man kann beliebig viele Dateien 'includen'
Freue mich auf Rückmeldungen!