Dass es am anfang schwarz ist liegt an der Helligkeit.
Die ist zu beginn auf 0 eingestellt und wird mit jedem Bild um 1 erhöht, bis sie schließlich 255 erreicht.
Man kann sie auch einfach auf 100 oder so stellen. Dann hat man beim ersten Bild direkt gute Wolken.
Das mit dem Färben sollte kein Problem darstellen.
Man kann ja als Parameter $Farbe1 und $Farbe2 einbauen. (mach ich gleich mal)
Spoiler anzeigen
#include <GDIPlus.au3>
[/autoit] [autoit][/autoit] [autoit]Opt('GUICloseOnESC', 0)
Opt('GUIOnEventMode', 0)
;~ Opt('MustDeclareVars', 1)
_GDIPlus_Startup()
[/autoit] [autoit][/autoit] [autoit];################## Hier Parameter bestimmen ###########################
Global $hell = 120 ;Helligkeit des Bildes
Global $Tiefe__ = 15 ;Tiefenwert
Global $Seed = 9 ;Nummer des Bildes
Global $F1 = 0xFF4040A0 ;Farbe 1
Global $F2 = 0xFFFFFFFF ;Farbe 2
Global $Size = 250 ; Welche Breite und Höhe soll das Bild haben ?
Global $Stretch = 2 ;Um welchen Faktor wird das Bild vergrößert ?
;#######################################################################
;~ Global Const $Size = 200
;~ Global Const $Stretch = 2
Global Const $Breite = $Size
Global Const $Hoehe = $Size
Global Const $Titel = 'Perlin'
Global Const $WM_NCHITTEST = 0x0084 ; Fenster "Anfassen"
Global Const $HTCAPTION = 2 ; Fenster "Anfassen"
Global Const $WS_EX_LAYERED = 0x00080000
Global Const $WS_POPUP = 0x80000000
Global Const $SRCCOPY = 0x00CC0020
Global Const $BLACKNESS = 0x00000042
Global Const $DIB_RGB_COLORS = 0 ;Eine Absolut sinnlose Variable die aber immer fehlt.
Global Const $h_NTDLL_DLL = DllOpen('ntdll.dll')
Global Const $h_MSIMG32_DLL = DllOpen('msimg32.dll')
Global Const $h_GDI32_DLL = DllOpen('gdi32.dll')
Global Const $h_OLE32_DLL = DllOpen('ole32.dll')
Global Const $h_USER32_DLL = DllOpen('user32.dll')
Global Const $h_KERNEL32_DLL = DllOpen('kernel32.dll')
Global Const $h_AlphaStruct = _GDI_AlphaBlend_GetStruct()
[/autoit] [autoit][/autoit] [autoit]Global $hGUI = GUICreate($Titel, $Breite * $Stretch, $Hoehe * $Stretch, _C($Breite * $Stretch, 1), _C($Hoehe * $Stretch, 0), $WS_POPUP, $WS_EX_LAYERED)
GUISetBkColor(0xFF0000, $hGUI)
WinSetTrans($hGUI, '', 255)
GUISetOnEvent(-3, '_Exit', $hGUI)
GUISetState(@SW_SHOW, $hGUI)
Global Const $hdc_GUI = _WinAPI_GetDC($hGUI)
[/autoit] [autoit][/autoit] [autoit]Global $Backbuffer = _CreateImage($Breite*$Stretch, $Hoehe*$Stretch)
Global $hDC_Backbuffer = DllStructGetData($Backbuffer, 1, 1)
;~ ;################## Hier Parameter bestimmen ###########################
;~ Global $hell = 120 ;Helligkeit des Bildes
;~ Global $Tiefe__ = 15 ;Tiefenwert
;~ Global $Seed = 9 ;Nummer des Bildes
;~ Global $F1 = 0xFF4040A0 ;Farbe 1
;~ Global $F2 = 0xFFFFFFFF ;Farbe 2
;~ ;#######################################################################
Global $Tiefe_ = 0
Global $Timer = TimerInit()
Global $Perlin = _CreatePerlin($Breite, $Hoehe, $Tiefe__, $Seed, $hell, $F1, $F2)
Global $Diff = Int(TimerDiff($Timer))
Global $ImageSchrift_Zeit = _CreateImageSchrift('Size: ' & $Breite & 'x' & $Hoehe & ' px' & '|Helligkeit: ' & $hell & '|Tiefe: ' & $Tiefe_ & '|Benötigte Zeit: ' & $Diff & ' ms|Pixel pro ms: ' & Round($Breite*$Hoehe/$Diff, 2), 0xFF000000, 4) ; 4px große Schrift
[/autoit] [autoit][/autoit] [autoit]GUIRegisterMsg($WM_NCHITTEST, "WM_NCHITTEST")
OnAutoItExitRegister('_Exit')
While Sleep(100)
$Seed = Random(0, 50000)
_DrawImageStretch($hDC_Backbuffer, 0, 0, $Perlin, $Stretch)
_DrawImageTrans($hDC_Backbuffer, 2*$Stretch, ($Hoehe - DllStructGetData($ImageSchrift_Zeit, 1, 3) - 1)*$Stretch, $ImageSchrift_Zeit, $Stretch)
_DrawImage($hdc_GUI, 0, 0, $Backbuffer)
_DeleteImage($Perlin)
_DeleteImage($ImageSchrift_Zeit)
$hell += 1
If $hell > 255 Then $hell = 0
$Timer = TimerInit()
$Perlin = _CreatePerlin($Breite, $Hoehe, $Tiefe__, $Seed, $hell, $F1, $F2)
$Diff = Int(TimerDiff($Timer))
$ImageSchrift_Zeit = _CreateImageSchrift('Size: ' & $Breite & 'x' & $Hoehe & ' px' & '|Helligkeit: ' & $hell & '|Tiefe: ' & $Tiefe_ & '|Benötigte Zeit: ' & $Diff & ' ms|Pixel pro ms: ' & Round($Breite*$Hoehe/$Diff, 2), 0xFF000000, 4) ; 4px große Schrift
WEnd
Func _Zufall(ByRef $Z) ; Eine Pseudo Zufallszahl wird generiert.
$Z = Mod((7141 * $Z + 54773), 259200)
If $Z < 129600 Then Return 1 ; Nur mit 0 und 1
Return 0
EndFunc ;==>_Zufall
Func _Zufall2(ByRef $Z) ; Eine Pseudo Zufallszahl wird generiert.
$Z = Mod((7141 * $Z + 54773), 259200)
Return $Z / 259200 ; Ein Kommawert zw 0 und 1
EndFunc ;==>_Zufall
Func _CreatePerlin($b, $h, $Tiefe = 15, $Nummer = 1, $Helligkeit = 100, $Farbe1 = 0xFF000000, $Farbe2 = 0xFFFFFFFF)
If $Tiefe < 1 Then $Tiefe = 1
If Int(_Log(_Min($b, $h),2)) - 1 <= Int($Tiefe) Then $Tiefe = Int(_Log(_Min($b, $h),2)) - 1 ;Überprüfung ob die Tiefe möglich ist bei der angegebenen Auflösung
$Tiefe_ = $Tiefe
Local $randx = Int($b/3) ; Ein Rand muss sein, da sonst unten und rechts alles dunkel ist
Local $randy = Int($h/3) ; Und oben und links alles hell. Kommt durch das Vergrößern...
$b += $randx
$h += $randy
Local $img = _CreateImage($b, $h) ;Bild erzeugen Hier liegen die ganzen Verpixelungen
Local $hdc = DllStructGetData($img, 1, 1)
Local $ptr = DllStructGetData($img, 1, 4)
Local $hbmp = DllStructGetData($img, 1, 5)
Local $struct = DllStructCreate('int['& $b * $h &']', $ptr)
Local $ziel = _CreateImage($b, $h) ;Hier wird das Endergebnis zusammengebaut.
Local $hdc_ziel = DllStructGetData($ziel, 1, 1)
Local $tmpImg = _CreateImage($b, $h) ;Hier wird immer jeweils eine Ebene vergrößert.
Local $Mode = 0
$gr = _GDIPlus_GraphicsCreateFromHDC(DllStructGetData($tmpImg, 1, 1))
_GDIPlus_GraphicsSetInterpolationMode($gr, 7)
For $p = 0 To $Tiefe Step 1
For $i = 0 To $b / 2 ^ ($Tiefe - $p) - 1 Step 1
For $o = 0 To $h / 2 ^ ($Tiefe - $p) - 1 Step 1
Switch _Zufall($Nummer)
Case 1
DllStructSetData($struct, 1, $Farbe2, $b * $i + $o + 1)
Case 0
DllStructSetData($struct, 1, $Farbe1, $b * $i + $o + 1)
EndSwitch
Next
Next
$Mode = 1
$bm = _GDIPlus_BitmapCreateFromHBITMAP($hbmp)
_GDIPlus_GraphicsDrawImageRectRect($gr, $bm, 0, 0, $b / 2 ^ ($Tiefe - $p), $h / 2 ^ ($Tiefe - $p), 0, 0, $b, $h)
_GDIPlus_BitmapDispose($bm)
_GDI_AlphaBlend($hdc_ziel, 0, 0, $b, $h, DllStructGetData($tmpImg, 1, 1), 0, 0, $b, $h, _GDI_AlphaBlend_GetStruct(255 / 2 ^ $p))
Next
$b -= $randx
$h -= $randy
Local $tmpImg2 = _CreateImage($b, $h) ; Dieses Bild enthält das Endbild.
_WinAPI_BitBlt(DllStructGetData($tmpImg2, 1, 1), 0, 0, $b, $h, $hdc_ziel, $randx/2,$randy/2, $SRCCOPY) ;Es wird der Mittelteil ins Endbild kopiert. Ränder werden so beschnitten.
Switch $Helligkeit
Case 0 To 255/2
_GDIPlus_GraphicsClear($gr, 0xFF000000) ; TmpImg1 wird nicht mehr gebraucht
_GDI_AlphaBlend(DllStructGetData($tmpImg2, 1, 1), 0, 0, $b, $h, DllStructGetData($tmpImg, 1, 1), 0, 0, 10,10, _GDI_AlphaBlend_GetStruct(255-$Helligkeit*2))
Case 255/2 To 255
_GDIPlus_GraphicsClear($gr, 0xFFFFFFFF) ; TmpImg1 wird nicht mehr gebraucht
_GDI_AlphaBlend(DllStructGetData($tmpImg2, 1, 1), 0, 0, $b, $h, DllStructGetData($tmpImg, 1, 1), 0, 0, 10,10, _GDI_AlphaBlend_GetStruct($Helligkeit*2 - 255))
EndSwitch
_GDIPlus_GraphicsDispose($gr)
_DeleteImage($img)
_DeleteImage($tmpImg)
_DeleteImage($ziel)
Return $tmpImg2
EndFunc ;==>_PerlinNoise
Func _GDIPlus_GraphicsSetInterpolationMode($hGraphics, $iInterpolationMode)
Local $aResult = DllCall($ghGDIPDll, "uint", "GdipSetInterpolationMode", "hwnd", $hGraphics, "int", $iInterpolationMode)
If @error Then Return SetError(@error, @extended, False)
$GDIP_STATUS = $aResult[0]
Return $aResult[0] = 0
EndFunc ;==>_GDIPlus_GraphicsSetInterpolationMode
Func _WinAPI_SetStretchBltMode($hDC, $iMode)
[/autoit] [autoit][/autoit] [autoit]Local $Ret = DllCall($h_GDI32_DLL, 'int', 'SetStretchBltMode', 'hwnd', $hDC, 'int', $iMode)
[/autoit] [autoit][/autoit] [autoit]If (@error) Or (Not $Ret[0]) Then
Return SetError(1, 0, 0)
EndIf
Return 1
EndFunc ;==>_WinAPI_SetStretchBltMode
#cs - Alte Perlin Noise Func
[/autoit] [autoit][/autoit] [autoit]Func _PerlinNoise($b, $h, $Tiefe, $Helligkeit, $Nummer, $hGraphics, $hDC_Backbuffer)
If $Tiefe < 1 Then $Tiefe = 1
If Int(_Log(_Min($b, $h),2)) - 1 <= Int($Tiefe) Then $Tiefe = Int(_Log(_Min($b, $h),2)) - 1 ;Überprüfung ob die Tiefe möglich ist bei der angegebenen Auflösung
$Tiefe_ = $Tiefe
;~ $b = Breite
;~ $h = Hoehe
;~ $Tiefe = Anzahl Bilder
;~ $Helligkeit = 0 - 255
Local $img = _CreateImage($b, $h) ;Bild erzeugen
Local $hdc = DllStructGetData($img, 1, 1)
Local $ptr = DllStructGetData($img, 1, 4)
Local $struct = DllStructCreate('int['&$b * $h&']', $ptr)
Local $bmp = _GDIPlus_BitmapCreateFromGraphics($b, $h, $hGraphics)
Local $hBu = _GDIPlus_ImageGetGraphicsContext($bmp)
Local $col
Local $bmp2 = _GDIPlus_BitmapCloneArea($bmp, 0, 0, $b, $h)
Local $bbuffer = _GDIPlus_ImageGetGraphicsContext($bmp2)
Local $hBuffer = _GDIPlus_GraphicsCreateFromHDC($hDC_Backbuffer)
Local $Erhellen = 1, $Verdunkeln = 1
$Helligkeit = _Betrag($Helligkeit)
While $Helligkeit > 2
$Helligkeit -= 1
WEnd
If $Helligkeit < 1 Then
$Verdunkeln = $Helligkeit
$Erhellen = 1
Else
$Erhellen = 1 - ($Helligkeit - 1)
$Verdunkeln = 1
EndIf
Local $px = 0
Local $pxges = 0
For $p = 0 To $Tiefe Step 1 ;p = BildNummern
For $x = 0 To $b / 2 ^ ($Tiefe - $p) Step 1
For $y = 0 To $h / 2 ^ ($Tiefe - $p) Step 1
$pxges += 1
Next
Next
Next
For $p = 0 To $Tiefe Step 1 ;p = BildNummern
For $x = 0 To $b / 2 ^ ($Tiefe - $p) Step 1
For $y = 0 To $h / 2 ^ ($Tiefe - $p) Step 1
Switch _Zufall($Nummer)
Case 0
$col = '0x' & Hex((255 / 2 ^ $p) * $Erhellen, 2) & '000000'
Case 1
$col = '0x' & Hex((255 / 2 ^ $p) * $Verdunkeln, 2) & 'FFFFFF'
EndSwitch
DllCall($ghGDIPDll, 'int', 'GdipBitmapSetPixel', 'hwnd', $bmp, 'int', $x, 'int', $y, 'dword', $col)
Next
Next
_GDIPlus_GraphicsDrawImageRectRect($bbuffer, $bmp, 0, 0, $b / 2 ^ ($Tiefe - $p), $h / 2 ^ ($Tiefe - $p), 0, 0, $b, $h)
Next
Local $_ptr, $_hbmp
Local $_hdc = _CreateNewBmp32($b, $h, $_ptr, $_hbmp)
Local $gra = _GDIPlus_GraphicsCreateFromHDC($_hdc)
_GDIPlus_GraphicsDrawImage($gra, $bmp2, 0, 0)
_GDIPlus_GraphicsDispose($gra)
_GDIPlus_GraphicsDispose($hBu)
_GDIPlus_GraphicsDispose($hBuffer)
_GDIPlus_GraphicsDispose($bbuffer)
_GDIPlus_BitmapDispose($bmp)
_GDIPlus_BitmapDispose($bmp2)
Local $a[3] = [$_hdc, $_hbmp, $_ptr]
Return $a
EndFunc ;==>_PerlinNoise
#ce
[/autoit] [autoit][/autoit] [autoit]#Region - Image Befehle (by Mars)
[/autoit] [autoit][/autoit] [autoit]Func _CreateImage($b, $h)
Local $ptr, $hdc, $hbmp
$hdc = _CreateNewBmp32($b, $h, $ptr, $hbmp)
Local $struct = DllStructCreate('int[5]')
DllStructSetData($struct, 1, $hdc, 1)
DllStructSetData($struct, 1, $b, 2)
DllStructSetData($struct, 1, $h, 3)
DllStructSetData($struct, 1, $ptr, 4)
DllStructSetData($struct, 1, $hbmp, 5)
Return $struct
EndFunc ;==>_CreateImage
Func _CreateImageRes($res)
Local $ptr, $hdc, $hbmp, $b, $h
$hdc = getDCfromRes32($res, $ptr, $hbmp, $b, $h)
Local $struct = DllStructCreate('int[5]')
DllStructSetData($struct, 1, $hdc, 1)
DllStructSetData($struct, 1, $b, 2)
DllStructSetData($struct, 1, $h, 3)
DllStructSetData($struct, 1, $ptr, 4)
DllStructSetData($struct, 1, $hbmp, 5)
Return $struct
EndFunc ;==>_CreateImageRes
Func _CreateImageSchrift($String, $Farbe = 0xFFFFFFFF, $Size_ = 5, $abs = 1)
Local $size = _GetSize($String, $Size_, $abs)
Local $b = $size[0]
Local $h = $size[1]
Local $ptr, $hbmp
Local $hdc = _CreateNewBmp32($b, $h, $ptr, $hbmp)
Local $hgr = _GDIPlus_GraphicsCreateFromHDC($hdc)
_GDIPlus_GraphicsClear($hgr, 0x00000000)
_GDIPlus_GraphicsDispose($hgr)
_DrawSchrift($hdc, $String, $Size_, $Farbe, $abs)
Local $struct = DllStructCreate('int[5]')
DllStructSetData($struct, 1, $hdc, 1)
DllStructSetData($struct, 1, $b, 2)
DllStructSetData($struct, 1, $h, 3)
DllStructSetData($struct, 1, $ptr, 4)
DllStructSetData($struct, 1, $hbmp, 5)
Return $struct
EndFunc ;==>_CreateImageSchrift
Func _DrawImage($hdc, $x, $y, $struct, $yoffset = 0)
_WinAPI_BitBlt($hdc, $x, $y + $yoffset, DllStructGetData($struct, 1, 2), DllStructGetData($struct, 1, 3), DllStructGetData($struct, 1, 1), 0, 0, $SRCCOPY)
EndFunc ;==>_DrawImage
Func _DrawImageStretch($hdc, $x, $y, $struct, $Zoom = 1, $yoffset = 0)
_WinAPI_StretchBlt($hdc, $x, $y, DllStructGetData($struct, 1, 2)*$Zoom, DllStructGetData($struct, 1, 3)*$Zoom, DllStructGetData($struct, 1, 1), 0, 0,DllStructGetData($struct, 1, 2), DllStructGetData($struct, 1, 3), $SRCCOPY)
EndFunc
Func _DrawImageTrans($hdc, $x, $y, $struct, $Zoom = 1, $yoffset = 0)
_GDI_AlphaBlend($hdc, $x, $y + $yoffset, DllStructGetData($struct, 1, 2)*$Zoom, DllStructGetData($struct, 1, 3)*$Zoom, DllStructGetData($struct, 1, 1), 0, 0, DllStructGetData($struct, 1, 2), DllStructGetData($struct, 1, 3), $h_AlphaStruct)
EndFunc ;==>_DrawImageTrans
Func _DeleteImage(ByRef $struct)
_Delete_Bitmap32(DllStructGetData($struct, 1, 1), DllStructGetData($struct, 1, 5))
$struct = 0
EndFunc ;==>_DeleteImage
Func _CopyImage($img)
Local $hDC_img = DllStructGetData($img, 1, 1)
Local $b_img = DllStructGetData($img, 1, 2)
Local $h_img = DllStructGetData($img, 1, 3)
Local $ret = _CreateImage($b_img, $h_img)
_DrawImage(DllStructGetData($ret, 1, 1), 0, 0, $img, 0)
Return $ret
EndFunc ;==>_CopyImage
Func _SaveImage($img)
Local $Pfad = FileSaveDialog('BildSpeichern', @ScriptDir, '(*,.png)', Default, Hex(Random(256, 16 ^ 3, 1), 3) & '.png')
If Not StringRight($Pfad, 4) = '.png' Then $Pfad &= '.png'
_GDIPlus_Startup()
Local $bm = _GDIPlus_BitmapCreateFromHBITMAP(DllStructGetData($img, 1, 5))
_GDIPlus_ImageSaveToFile($bm, $Pfad)
_GDIPlus_BitmapDispose($bm)
_GDIPlus_Shutdown()
EndFunc ;==>_Save
#EndRegion - Image Befehle (by Mars)
;EndRegion - Image Befehle (by Mars)
#Region
[/autoit] [autoit][/autoit] [autoit]Func _Exit()
_GDIPlus_Shutdown()
_WinAPI_ReleaseDC($hGUI, $hdc_GUI)
_DeleteImage($Backbuffer)
_DeleteImage($Perlin)
_DeleteImage($ImageSchrift_Zeit)
DllClose($h_NTDLL_DLL)
DllClose($h_MSIMG32_DLL)
DllClose($h_GDI32_DLL)
DllClose($h_OLE32_DLL)
DllClose($h_USER32_DLL)
DllClose($h_KERNEL32_DLL)
EndFunc
Func _Log($x, $y) ; Logarithmus zur Basis y
Return Log($x) / Log($y)
EndFunc ;==>Log2
Func _Betrag($a)
If $a > 0 Then Return $a
Return -$a
EndFunc ;==>_Betrag
Func _Min($a, $b)
If $a > $b Then Return $b
Return $a
EndFunc ;==>_Min
Func WM_NCHITTEST($hWnd, $iMsg, $iwParam, $ilParam)
If ($hWnd = $hGUI) And ($iMsg = $WM_NCHITTEST) Then Return $HTCAPTION
EndFunc ;==>WM_NCHITTEST
Func _DrawSchrift($hdc, $String, $px, $Farbe = 0xFFFF0000, $abs = 1)
Local $FontPng = _SchriftRes($px)
Local $Font
Local $ptr, $hbmp, $imgBreite, $imgHoehe
Local $hDC_Font = getDCfromRes32($FontPng, $ptr, $hbmp, $imgBreite, $imgHoehe)
_Farbe($ptr, $Farbe, $imgBreite * $imgHoehe)
Local $l = StringLen($String)
Local $s = ''
Local $x = 0, $y = 0, $nr = 0
For $i = 1 To $l Step 1
$s = StringMid($String, $i, 1)
If $s = '|' Then
$y += $px + $abs
$x = 0
Else
$nr = _GetNr($s)
If $nr <> 36 Then _WinAPI_StretchBlt($hdc, $x, $y, $px, $px, $hDC_Font, $nr * $px, 0, $px, $px, $SRCCOPY)
$x += $px + $abs
EndIf
Next
_Delete_Bitmap32($hDC_Font, $hbmp)
EndFunc ;==>_DrawSchrift
Func _GetSize($a, $px, $abs = 1)
Local $l = StringLen($a)
Local $s = ''
Local $c = 0, $c2 = 0, $c3 = 0
For $i = 1 To $l Step 1
$c += 1
If $c >= $c2 Then $c2 = $c
$s = StringMid($a, $i, 1)
If $s = '|' Then
$c = 0
$c3 += 1
EndIf
Next
Local $ret[2] = [$c2 * ($px + $abs), ($c3 + 1) * ($px + $abs)] ;5px für den Buchstaben und einer für den Abstand, $c3 wird erhöht, da Zeile 0 sonst nicht mitgezählt wird.
Return $ret
EndFunc ;==>_GetSize
Func _GetNr($a) ;Gibt die Nummer des Zeichens aus
Local $b[36 + 23] = ['a', 'b', 'c', 'd', 'e', 'f', 'g', 'h', 'i', 'j', 'k', 'l', 'm', 'n', 'o', 'p', 'q', 'r', 's', 't', 'u', 'v', 'w', 'x', 'y', 'z', '1', '2', '3', '4', '5', '6', '7', '8', '9', '0', '_', '.', ';', 'ä', 'ö', 'ü', '-', '§', '$', '%', '&', '#', '>', '<', '[', ']', '(', ')', '"', "'", '=', '+', ':']
For $i = 0 To 35 + 23 Step 1
If $a = $b[$i] Then Return $i
Next
Return 36 + 23
EndFunc ;==>_GetNr
Func _Farbe($ptr, $col, $px)
Local $_Struct = DllStructCreate('int[' & $px & ']', $ptr)
For $i = 0 To $px Step 1
If DllStructGetData($_Struct, 1, $i) = 0xFFFFFFFF Then
DllStructSetData($_Struct, 1, $col, $i)
Else
DllStructSetData($_Struct, 1, 0x00000000, $i)
EndIf
Next
EndFunc ;==>_Farbe
Func _SchriftRes($px) ;Enthält die png Bilder der Schriften als Ressourcen.
Switch $px
Case 4
Return '0x89504E470D0A1A0A0000000D49484452000000EC000000040100000000A5BFEE56000000874944415468DE017C0083FF00FEFEFFF9FF98FDFFFFFF99999FEFF8F8FFFF0006660BF996C3BD7EA4F000009989888921A8BD9999C299B693231ACF999B000FF90BF42F3CC3A5A4044000FA89EEBF21E8BB9FAE3296B6FC2C7F393FFD004F996B024F3CC3A5000E00009FFEF8F9F69F9BF8D9F2F6F92FFFF2FF1F1FF449FF0BF996C3BD7E00F440068A47638487EBE40000000049454E44AE426082'
Case 5
Return '0x89504E470D0A1A0A0000000D49484452000001270000000501000000002F321765000000C94944415478DA01BE0041FF00FFFFEFFFF1FFE30DC7FFFFFFF8C6318FFDFFC3F0FFFFF0000A52815FC92AC0EFD7F9440000008C6118423120630AE6318C6048C6B1884410C21F8C6330001FFC4150265F21303A1544F908008DA11F7A1F207D0AD6318FFE48C6AEFFC5F7D3F10FE35000118C5D5F908A1E303A1400038000FC6118427120630ACE3F948248AAB1240500FC311C7F90009F8C4150493F21303A1400F908008FFFEFC3F1FBE3F8C7F0EC7E4F93F127FFFF93FF0FC3FF9091FFC15FA64AC0EFD7F80000002DA25C98C2B780160000000049454E44AE426082'
EndSwitch
EndFunc ;==>_SchriftRes
Func _MemGlobalAlloc($iBytes, $iFlags = 0)
Local $aResult = DllCall($h_KERNEL32_DLL, 'handle', 'GlobalAlloc', 'uint', $iFlags, 'ulong_ptr', $iBytes)
Return $aResult[0]
EndFunc ;==>_MemGlobalAlloc
Func _MemGlobalLock($hMem)
Local $aResult = DllCall($h_KERNEL32_DLL, 'ptr', 'GlobalLock', 'handle', $hMem)
Return $aResult[0]
EndFunc ;==>_MemGlobalLock
Func _MemGlobalUnlock($hMem)
Local $aResult = DllCall($h_KERNEL32_DLL, 'bool', 'GlobalUnlock', 'handle', $hMem)
Return $aResult[0]
EndFunc ;==>_MemGlobalUnlock
Func _IsPressed($a)
Local $b = DllCall($h_USER32_DLL, "short", "GetAsyncKeyState", "int", '0x' & $a)
Return BitAND($b[0], 0x8000) <> 0
EndFunc ;==>_IsPressed
Func _Delete_Bitmap32($hdc, $hbmp)
_WinAPI_DeleteObject($hbmp)
_WinAPI_DeleteDC($hdc)
EndFunc ;==>_Delete_Bitmap32
Func _CreateNewBmp32($iWidth, $iHeight, ByRef $ptr, ByRef $hbmp) ;erstellt leere 32-bit-Bitmap; Rückgabe DC und ptr und handle auf die Bitmapdaten
;by Andy
Local $hcdc = _WinAPI_CreateCompatibleDC(0) ;Desktop-Kompatiblen DeviceContext erstellen lassen
Local $tBMI = DllStructCreate($tagBITMAPINFO) ;Struktur der Bitmapinfo erstellen und Daten eintragen
DllStructSetData($tBMI, "Size", DllStructGetSize($tBMI) - 4);Structgröße abzüglich der Daten für die Palette
DllStructSetData($tBMI, "Width", $iWidth)
DllStructSetData($tBMI, "Height", -$iHeight) ;minus =standard = bottomup
DllStructSetData($tBMI, "Planes", 1)
DllStructSetData($tBMI, "BitCount", 32) ;32 Bit = 4 Bytes => AABBGGRR
Local $adib = DllCall($h_GDI32_DLL, 'ptr', 'CreateDIBSection', 'hwnd', 0, 'ptr', DllStructGetPtr($tBMI), 'uint', $DIB_RGB_COLORS, 'ptr*', 0, 'ptr', 0, 'uint', 0)
$hbmp = $adib[0] ;hbitmap handle auf die Bitmap, auch per GDI+ zu verwenden
$ptr = $adib[4] ;pointer auf den Anfang der Bitmapdaten, vom Assembler verwendet
_WinAPI_SelectObject($hcdc, $hbmp) ;objekt hbitmap in DC
Return $hcdc ;DC der Bitmap zurückgeben
EndFunc ;==>_CreateNewBmp32
Func getDCfromRes32($res, ByRef $ptr, ByRef $hbmp, ByRef $iwidth_file32, ByRef $iheight_file32);Erstellt eine 32-Bit Bitmap von Ressource Daten. + Breite und Höhe werden ermittelt
_GDIPlus_Startup()
Local $hBitmap = Load_BMP_From_Mem($res)
$hbmp = _GDIPlus_BitmapCreateHBITMAPFromBitmap($hBitmap)
$iwidth_file32 = _GDIPlus_ImageGetWidth($hBitmap)
$iheight_file32 = _GDIPlus_ImageGetHeight($hBitmap)
;by Andy
Local $hcdc = _WinAPI_CreateCompatibleDC(0) ;Desktop-Kompatiblen DeviceContext erstellen lassen
Local $tBMI = DllStructCreate($tagBITMAPINFO) ;Struktur der Bitmapinfo erstellen und Daten eintragen
DllStructSetData($tBMI, "Size", DllStructGetSize($tBMI) - 4);Structgröße abzüglich der Daten für die Palette
DllStructSetData($tBMI, "Width", $iwidth_file32)
DllStructSetData($tBMI, "Height", -$iheight_file32) ;minus =standard = bottomup
DllStructSetData($tBMI, "Planes", 1)
DllStructSetData($tBMI, "BitCount", 32) ;32 Bit = 4 Bytes => AABBGGRR
Local $adib = DllCall($h_GDI32_DLL, 'ptr', 'CreateDIBSection', 'hwnd', 0, 'ptr', DllStructGetPtr($tBMI), 'uint', $DIB_RGB_COLORS, 'ptr*', 0, 'ptr', 0, 'uint', 0)
_WinAPI_SelectObject($hcdc, $adib[0])
; copy the content of the bitmap into the buffer ...
_WinAPI_GetDIBits($hcdc, $hbmp, 0, $iheight_file32, $adib[4], DllStructGetPtr($tBMI), $DIB_RGB_COLORS)
$hbmp = $adib[0] ;hbitmap handle auf die Bitmap, auch per GDI+ zu verwenden
$ptr = $adib[4] ;pointer auf den Anfang der Bitmapdaten, vom Assembler verwendet
;_arraydisplay($adib)
_WinAPI_SelectObject($hcdc, $hbmp) ;objekt hbitmap in DC
Return $hcdc ;DC der Bitmap zurückgeben
EndFunc ;==>getDCfromRes32
Func Load_BMP_From_Mem($pic)
Local $memBitmap, $len, $tMem, $hImage, $hData, $pData, $hStream, $hBitmapFromStream
$memBitmap = Binary($pic)
$len = BinaryLen($memBitmap)
$hData = _MemGlobalAlloc($len, 0x0002)
$pData = _MemGlobalLock($hData)
$tMem = DllStructCreate("byte[" & $len & "]", $pData)
DllStructSetData($tMem, 1, $memBitmap)
_MemGlobalUnlock($hData)
$hStream = _WinAPI_CreateStreamOnHGlobal($pData)
$hBitmapFromStream = _GDIPlus_BitmapCreateFromStream($hStream)
$tMem = ""
Return $hBitmapFromStream
EndFunc ;==>Load_BMP_From_Mem
Func _WinAPI_StretchBlt($hDestDC, $iXDest, $iYDest, $iWidthDest, $iHeightDest, $hSrcDC, $iXSrc, $iYSrc, $iWidthSrc, $iHeightSrc, $iRop)
DllCall('gdi32.dll', 'int', 'StretchBlt', 'hwnd', $hDestDC, 'int', $iXDest, 'int', $iYDest, 'int', $iWidthDest, 'int', $iHeightDest, 'hwnd', $hSrcDC, 'int', $iXSrc, 'int', $iYSrc, 'int', $iWidthSrc, 'int', $iHeightSrc, 'dword', $iRop)
EndFunc ;==>_WinAPI_StretchBlt
Func _GDI_AlphaBlend_GetStruct($Alpha = 255)
Local $struct = DllStructCreate($tagBLENDFUNCTION)
DllStructSetData($struct, 1, 0) ; 0 = AC_SRC_OVER
DllStructSetData($struct, 2, 0) ; 0 "Must be Zero"
DllStructSetData($struct, 3, $Alpha) ; Alpha fürs ganze Bild
DllStructSetData($struct, 4, 1) ; 1 = Bild enthält einen Alphakanal
Local $data = DllStructCreate("dword", DllStructGetPtr($struct))
$data = DllStructGetData($data, 1)
Return $data
EndFunc ;==>_GDI_AlphaBlend_GetStruct
Func _GDI_AlphaBlend($hDCDest, $nXOriginDest, $nYOriginDest, $nWidthDest, $nHeightDest, $hDCSrc, $nXOriginSrc, $nYOriginSrc, $nWidthSrc, $nHeightSrc, $blendFunction)
DllCall($h_MSIMG32_DLL, 'int', 'AlphaBlend', _
'ptr', $hDCDest, _ ; // handle to destination DC
'int', $nXOriginDest, _ ; // x-coord of upper-left corner
'int', $nYOriginDest, _ ; // y-coord of upper-left corner
'int', $nWidthDest, _ ; // destination width
'int', $nHeightDest, _ ; // destination height
'ptr', $hDCSrc, _ ; // handle to source DC
'int', $nXOriginSrc, _ ; // x-coord of upper-left corner
'int', $nYOriginSrc, _ ; // y-coord of upper-left corner
'int', $nWidthSrc, _ ; // source width
'int', $nHeightSrc, _ ; // source height
'dword', $blendFunction);$blendFunction) ; // alpha-blending function
EndFunc ;==>_GDI_AlphaBlend
Func _WinAPI_CreateStreamOnHGlobal($hGlobal = 0, $fDeleteOnRelease = True)
Local $aResult = DllCall($h_OLE32_DLL, "int", "CreateStreamOnHGlobal", "hwnd", $hGlobal, "int", $fDeleteOnRelease, "ptr*", 0)
Return $aResult[3]
EndFunc ;==>_WinAPI_CreateStreamOnHGlobal
Func _GDIPlus_BitmapCreateFromStream($pStream)
Local $aResult = DllCall($ghGDIPDll, "uint", "GdipCreateBitmapFromStream", "ptr", $pStream, "int*", 0)
Return $aResult[2]
EndFunc ;==>_GDIPlus_BitmapCreateFromStream
Func _C($a, $b = 0) ;Gibt x/y Koords für ein Fenster damit es zentriert ist.
If $b Then Return @DesktopWidth / 2 - $a / 2 ; Wenn b dann x
Return @DesktopHeight / 2 - $a / 2 ; Sonst y
EndFunc ;==>_C
#EndRegion
[/autoit]Soo Fertig !
Jetzt sollte direkt ein Bild zu sehen sein.
Man kann jetzt alles Relevante in den ersten Paar Zeilen Skript einstellen. (dann muss man nicht suchen wo die Variablen sind um was zu verändern.)