monoscout999 Posted June 1, 2011 Share Posted June 1, 2011 (edited) Hi forum i start to play whit GDI+ and i have a couple of issues 1. ¿wich way is the correct to dispose the brush? ¿this? #include <GDIPlus.au3> $GUI = Guicreate("Test GDI") Guisetstate() _GDIPlus_Startup() $hGraphics = _GDIPlus_GraphicsCreateFromHWND($GUI) $size = WinGetClientSize($GUI) $pos = Wingetpos($GUI) Local $printcolor for $x = $pos[0] + 6 to $size[0] for $y = $pos[1] + 22 to $size[1] $printcolor = _GDIPlus_BrushCreateSolid(0xff000000) _GDIPlus_GraphicsFillRect($hGraphics, $x, $y, 1, 1,$printcolor) _GDIplus_brushdispose($printcolor) Next Next sleep(5000) _GDIPlus_Graphicsdispose($hGraphics) _GDIPlus_Shutdown() ¿Or this? #include <GDIPlus.au3> $GUI = Guicreate("Test GDI") Guisetstate() _GDIPlus_Startup() $hGraphics = _GDIPlus_GraphicsCreateFromHWND($GUI) $size = WinGetClientSize($GUI) $pos = Wingetpos($GUI) Local $printcolor for $x = $pos[0] + 6 to $size[0] for $y = $pos[1] + 22 to $size[1] $printcolor = _GDIPlus_BrushCreateSolid(0xff000000) _GDIPlus_GraphicsFillRect($hGraphics, $x, $y, 1, 1,$printcolor) Next Next sleep(5000) _GDIplus_brushdispose($printcolor) _GDIPlus_Graphicsdispose($hGraphics) _GDIPlus_Shutdown() 2. ¿Wich way is the best to print on screen a bitmap from a variable reading? the variable contains randoms 0 and 1 0 = black 1 = White expandcollapse popup#include <GUIConstantsEx.au3> #include <StaticConstants.au3> #include <GDIPlus.au3> Global $texto $xlargo = 350 $ylargo = 350 $GUI = GUICreate("Mi GUI con imagen", -1, 500, -1, -1) GUISetBkColor(0x225599) $boton1 = GUICtrlCreateButton("Abrir Archivo", 25, 400, 175, 30) $boton2 = GUICtrlCreateButton("generar binario", 200, 400, 175, 30) _GDIPlus_Startup() $hGraphics = _GDIPlus_GraphicsCreateFromHWND($GUI) GUISetState(@SW_SHOW, $GUI) While 1 $msg = GUIGetMsg() Switch $msg Case $GUI_EVENT_CLOSE _GDIPlus_GraphicsDispose($hGraphics) _GDIPlus_Shutdown() Exit Case $boton1 $filename = FileOpenDialog("Eliga el archivo binario", "", "(*.txt)") $fileopen = FileOpen($filename) $texto = FileRead($fileopen) x0() Case $boton2 _Generaraleatorio() EndSwitch WEnd Func x0() Local $x = 25 Local $y = 25 Local $uno = StringSplit($texto, "") Local $contar = UBound($uno) - 1 For $pc = 1 To $contar Select Case $uno[$pc] = 0 $color = _GDIPlus_BrushCreateSolid(0x55000000) Case $uno[$pc] = 1 $color = _GDIPlus_BrushCreateSolid(0x55FFFFFF) EndSelect _GDIPlus_GraphicsFillRect($hGraphics, $x, $y, 1, 1,$color) _GDIPlus_BrushDispose($color) $x += 1 If $x = $xlargo + 25 Then $x = 25 $y += 1 If $y = $ylargo + 25 Then ExitLoop EndIf Next EndFunc ;==>x0 Func _Generaraleatorio() Local $p = 0 ;~ ProgressOn("Progreso", "Generando imagen aleatorea...", $p & "/ 10000") Do $texto = $texto & Random(0, 1, 1) $p += 1 ;~ ProgressSet($p * 0.0008, $p & "/ 122500") Until $p = 12250 Sleep(500) ;~ ProgressOff() x0() EndFunc ;==>_Generaraleatorio PD: press the right button to make it work, wait 6 or 7 seconds until the variable loads with randoms 0 and 1. the example is a little rusty because is made by me a couple of months ago 3. ¿Is necesary have a GUI where display the bitmap or i can print on the screen whitout it? If someone take the time to answer i will apreciate Edited June 1, 2011 by monoscout999 Link to comment Share on other sites More sharing options...
UEZ Posted June 1, 2011 Share Posted June 1, 2011 (edited) 1) creating a brush in a loop will cause a memory leak if you don't dispose it afterwards. In your example you fill the graphic screen with black pixels. I would do it this way: #include <GDIPlus.au3> $GUI = Guicreate("Test GDI") Guisetstate() _GDIPlus_Startup() $hGraphics = _GDIPlus_GraphicsCreateFromHWND($GUI) $size = WinGetClientSize($GUI) $pos = Wingetpos($GUI) Local $printcolor = _GDIPlus_BrushCreateSolid(0xff000000) for $y = 0 to $size[1] for $x = 0 to $size[0] _GDIPlus_GraphicsFillRect($hGraphics, $x, $y, 1, 1,$printcolor) Next Next sleep(5000) _GDIplus_brushdispose($printcolor) _GDIPlus_Graphicsdispose($hGraphics) _GDIPlus_Shutdown() The first x and y coordinate is not $pos[0] respectively $pos[1], it is 0,0! 2) to change the color of a brush use _GDIPlus_BrushSetSolidColor() instead of creating a brush everytime. 3) you can print to screen directly but after a refresh it will be erased - a GUI with a screen makes more sense. Look here: http://www.autoitscript.com/forum/index.php?showtopic=87200. There are plenty of examples. Br, UEZ Edited June 1, 2011 by UEZ Please don't send me any personal message and ask for support! I will not reply! Selection of finest graphical examples at Codepen.io The own fart smells best! ✌Her 'sikim hıyar' diyene bir avuç tuz alıp koşma!¯\_(ツ)_/¯ ٩(●̮̮̃•̃)۶ ٩(-̮̮̃-̃)۶ૐ Link to comment Share on other sites More sharing options...
monoscout999 Posted June 1, 2011 Author Share Posted June 1, 2011 @UEZ i dont have words... i´m shocked anout the GDI+ examples of that link... algorithmes and more algorithmesI think i gonna start whit some ball bouncing the sides of the GUILater i will try acceleration algorithmes.I will ask here on the forum if i need any help...Thanks a lot Link to comment Share on other sites More sharing options...
Recommended Posts
Create an account or sign in to comment
You need to be a member in order to leave a comment
Create an account
Sign up for a new account in our community. It's easy!
Register a new accountSign in
Already have an account? Sign in here.
Sign In Now