Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- #include <WindowsConstants.au3>
- #include <GUIConstants.au3>
- #include <GDIPlus.au3>
- #include <WinAPI.au3>
- ; -Author: name22 (www.autoit.de)
- Global $hDll_GDI32 = DllOpen("gdi32.dll")
- Global $iX_Pos, $iY_Pos, $iX_Dir, $iY_Dir
- Global $sFile = FileSaveDialog("Save Picture", "", "Bitmap (*.bmp)")
- If @error Then Exit
- Global $iCount = 10000
- Global $iSize = 300
- Global $iColorBGR_Seed = 0x0000FF
- Global $iColorBGR_Not = 0x000000
- Global $iColorBGR_Set = 0xFF0000
- Global $iColorBGR_Mov = 0x202020
- Opt("GUIOnEventMode", 1)
- $hWnd = GUICreate("Brownian Tree", $iSize, $iSize)
- GUISetState()
- $hDC_Window = _WinAPI_GetDC($hWnd)
- $hDC_Bitmap = _WinAPI_CreateCompatibleDC($hDC_Window)
- $hBitmap = _WinAPI_CreateCompatibleBitmap($hDC_Window, $iSize, $iSize)
- $hObj_Old = _WinAPI_SelectObject($hDC_Bitmap, $hBitmap)
- OnAutoItExitRegister("_Shutdown")
- GUISetOnEvent($GUI_EVENT_CLOSE, "_Close")
- GUISetOnEvent($GUI_EVENT_RESTORE, "_DrawBuffer")
- GUIRegisterMsg($WM_PAINT, "_DrawBuffer")
- _WinAPI_SetBkColor($hDC_Bitmap, $iColorBGR_Not)
- _SetPixel($hDC_Bitmap, Random(0, $iSize - 1, 1), Random(0, $iSize - 1, 1), $iColorBGR_Seed)
- _DrawBuffer()
- For $i = 1 To $iCount
- Do
- $iX_Pos = Random(0, $iSize - 1, 1)
- $iY_Pos = Random(0, $iSize - 1, 1)
- Until _GetPixel($hDC_Bitmap, $iX_Pos, $iY_Pos) = $iColorBGR_Not
- While True
- _SetPixel($hDC_Window, $iX_Pos, $iY_Pos, $iColorBGR_Mov)
- $iX_Dir = Random(-1, 1, 1)
- $iY_Dir = Random(-1, 1, 1)
- If $iX_Dir = 0 And $iY_Dir = 0 Then ContinueLoop
- If $iX_Pos + $iX_Dir < 0 Or $iX_Pos + $iX_Dir >= $iSize Or $iY_Pos + $iY_Dir < 0 Or $iY_Pos + $iY_Dir >= $iSize Then
- _DrawBuffer()
- $i -= 1
- ExitLoop
- Else
- If _GetPixel($hDC_Bitmap, $iX_Pos + $iX_Dir, $iY_Pos + $iY_Dir) <> $iColorBGR_Not Then
- _SetPixel($hDC_Bitmap, $iX_Pos, $iY_Pos, $iColorBGR_Set)
- _DrawBuffer()
- ExitLoop
- Else
- $iX_Pos += $iX_Dir
- $iY_Pos += $iY_Dir
- EndIf
- EndIf
- WEnd
- Next
- _GDIPlus_Startup()
- $hBitmapTmp = _GDIPlus_BitmapCreateFromHBITMAP($hBitmap)
- If Not StringRegExp($sFile, "\.bmp\z") Then $sFile &= ".bmp"
- _GDIPlus_ImageSaveToFile($hBitmapTmp, $sFile)
- _GDIPlus_ImageDispose($hBitmapTmp)
- _GDIPlus_Shutdown()
- While Sleep(1000)
- WEnd
- Func _SetPixel($hDC, $iX, $iY, $iColor)
- DllCall($hDll_GDI32, 'INT', 'SetPixelV', 'HWND', $hDC, 'INT', $iX, 'INT', $iY, 'DWORD', $iColor)
- EndFunc
- Func _GetPixel($hDC, $iX, $iY)
- $aRet = DllCall($hDll_GDI32, 'DWORD', 'GetPixel', 'HWND', $hDC, 'INT', $iX, 'INT', $iY)
- Return $aRet[0]
- EndFunc
- Func _DrawBuffer()
- DllCall($hDll_GDI32, "BOOL", "BitBlt", "HANDLE", $hDC_Window, "INT", 0, "INT", 0, "INT", $iSize, "INT", $iSize, "HANDLE", $hDC_Bitmap, "INT", 0, "INT", 0, "DWORD", $SRCCOPY)
- EndFunc
- Func _Shutdown()
- _WinAPI_SelectObject($hDC_Bitmap, $hObj_Old)
- _WinAPI_ReleaseDC($hWnd, $hDC_Window)
- _WinAPI_DeleteDC($hDC_Bitmap)
- _WinAPI_DeleteObject($hBitmap)
- DllClose($hDll_GDI32)
- EndFunc
- Func _Close()
- Exit
- EndFunc
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement