Sauvegarde graphic => file

Aide et conseils concernant AutoIt et ses outils.
Règles du forum
.
Répondre
gothgothhh
Niveau 2
Niveau 2
Messages : 28
Enregistré le : ven. 19 août 2011 13:03
Status : Hors ligne

Sauvegarde graphic => file  

#1

Message par gothgothhh »

Bonjour, j'ai un soucis je suis bloqué depuis plusieurs heures j'ai beau cherché les solutions je n'arrive pas à sauvegarder une image avec gdiplus

Code : Tout sélectionner

#include <GDIPlus.au3>
#include <GUIConstantsEx.au3>

Global $WIDTH = 500, $HEIGHT = 500, $nMsg
Global $whiteColor = 0xFFFFFFFF

Global $WINDOWS = GUICreate("GRAPHIC", $WIDTH, $HEIGHT, -1, -1, 0x80000000)
GUISetState(@SW_SHOW)

_GDIPlus_Startup()

Global $GRAPHIC = _GDIPlus_GraphicsCreateFromHWND($WINDOWS)

Global $WHITE = _GDIPlus_BrushCreateSolid($whiteColor)
Global $ACTUAL_WHITE
For $ACTUAL_WHITE = 1 To $WIDTH Step 2
	_GDIPlus_GraphicsFillRect($GRAPHIC, $ACTUAL_WHITE, 1, 1, 500, $WHITE)
Next

Global $ACTUAL_BLACK
For $ACTUAL_BLACK = 2 To $WIDTH - 1 Step 2
	_GDIPlus_GraphicsFillRect($GRAPHIC, $ACTUAL_BLACK, 1, 1, 500)
Next

Global $BITMAP = _GDIPlus_BitmapCreateFromGraphics($WIDTH, $HEIGHT, $GRAPHIC)
_GDIPlus_ImageSaveToFile($BITMAP, @ScriptDir & "\IMG.bmp")

While 1
	$nMsg = GUIGetMsg(1)
	Switch $nMsg[0]
		Case $GUI_EVENT_CLOSE
			ExitLoop
	EndSwitch
WEnd

_GDIPlus_BrushDispose($WHITE)
_GDIPlus_GraphicsDispose($GRAPHIC)
_GDIPlus_Shutdown()

C'est surement une erreur toute bête mais ça ne marche pas, merci d'avance !



Je me suis rendu compte qu'on pouvait screen une fenêtre avec _ScreenCapture_CaptureWnd et qu'on pouvait ignoré le curseur donc j'ai finalement trouvé une solution, voici le code

Code : Tout sélectionner

#include <GDIPlus.au3>
#include <GUIConstantsEx.au3>
#include <ScreenCapture.au3>

Global $WIDTH = 10, $HEIGHT = 10, $nMsg
Global $whiteColor = 0xFFFFFFFF

Global $WINDOWS = GUICreate("GRAPHIC", $WIDTH, $HEIGHT, -1, -1, 0x80000000)
GUISetState(@SW_SHOW)

_GDIPlus_Startup()

Global $GRAPHIC = _GDIPlus_GraphicsCreateFromHWND($WINDOWS)

Global $WHITE = _GDIPlus_BrushCreateSolid($whiteColor)
Global $ACTUAL_WHITE
For $ACTUAL_WHITE = 1 To $WIDTH Step 2
	_GDIPlus_GraphicsFillRect($GRAPHIC, $ACTUAL_WHITE, 1, 1, 10, $WHITE)
Next

Global $ACTUAL_BLACK
For $ACTUAL_BLACK = 2 To $WIDTH - 1 Step 2
	_GDIPlus_GraphicsFillRect($GRAPHIC, $ACTUAL_BLACK, 1, 1, 10)
Next

Global $BITMAP = _GDIPlus_BitmapCreateFromGraphics($WIDTH, $HEIGHT, $GRAPHIC)
Global $CAPTURE = _ScreenCapture_CaptureWnd(@ScriptDir & "\IMG.bmp", $WINDOWS, 1, 1, -1, -1, False)
_GDIPlus_ImageSaveToFile($CAPTURE, @ScriptDir & "\IMG.bmp")

While 1
	$nMsg = GUIGetMsg(1)
	Switch $nMsg[0]
		Case $GUI_EVENT_CLOSE
			ExitLoop
	EndSwitch
WEnd

_GDIPlus_BrushDispose($WHITE)
_GDIPlus_GraphicsDispose($GRAPHIC)
_GDIPlus_Shutdown()

Avatar du membre
walkson
Modérateur
Modérateur
Messages : 1020
Enregistré le : ven. 12 août 2011 19:49
Localisation : Hurepoix
Status : Hors ligne

Re: Sauvegarde graphic => file

#2

Message par walkson »

Bonjour,
J'ai retrouvé une fonction qui peut vous intéresser
#include <GDIPlus.au3>
#include <GUIConstantsEx.au3>

Global $WIDTH = 100, $HEIGHT = 100, $nMsg
Global $whiteColor = 0xFFFFFFFF

Global $WINDOWS = GUICreate("GRAPHIC", $WIDTH, $HEIGHT, -1, -1);, 0x80000000)
GUISetState(@SW_SHOW)

_GDIPlus_Startup()

Global $GRAPHIC = _GDIPlus_GraphicsCreateFromHWND($WINDOWS)
Global $BITMAP = _GDIPlus_BitmapCreateFromGraphics($WIDTH, $HEIGHT, $GRAPHIC)
Global $WHITE = _GDIPlus_BrushCreateSolid($whiteColor)
Global $ACTUAL_WHITE
For $ACTUAL_WHITE = 1 To $WIDTH Step 2
   _GDIPlus_GraphicsFillRect($GRAPHIC, $ACTUAL_WHITE, 1, 1, 10, $WHITE)
Next

Global $ACTUAL_BLACK
For $ACTUAL_BLACK = 2 To $WIDTH - 1 Step 2
   _GDIPlus_GraphicsFillRect($GRAPHIC, $ACTUAL_BLACK, 1, 1, 10)
Next
_GDIPlus_BrushDispose($WHITE)
_GDIPlus_GraphicsDispose($GRAPHIC)
_GDIPlus_Shutdown()
_GDIPlus_GraphicsSaveToBitmap($WINDOWS, $WIDTH, $HEIGHT, @DesktopDir & "\AAa.bmp")
While 1
   $nMsg = GUIGetMsg(1)
   Switch $nMsg[0]
      Case $GUI_EVENT_CLOSE
         ExitLoop
   EndSwitch
WEnd


Func _GDIPlus_GraphicsSaveToBitmap($hWnd, $iWidth, $iHeight, $sFilename)
   _GDIPlus_Startup()
    Local Const $hDC = _WinAPI_GetDC($hWnd)
    Local Const $memDC = _WinAPI_CreateCompatibleDC($hDC)
    Local Const $memBmp = _WinAPI_CreateCompatibleBitmap($hDC, $iWidth, $iHeight)
    _WinAPI_SelectObject ($memDC, $memBmp)
    _WinAPI_BitBlt($memDC, 0, 0, $iWidth, $iHeight, $hDC, 0, 0, 0x00CC0020) ;  0x00CC0020 = $SRCCOPY
    Local Const $hBitmap = _GDIPlus_BitmapCreateFromHBITMAP ($memBmp)
    _GDIPlus_ImageSaveToFile($hBitmap, $sFilename)
    _WinAPI_ReleaseDC($hWnd, $hDC)
    _WinAPI_DeleteDC($memDC)
    _WinAPI_DeleteObject($memBmp)
    _GDIPlus_BitmapDispose($hBitmap)
   _GDIPlus_Shutdown()
EndFunc
Cordialement,
Walkson
"Horas non numero nisi serenas " Le canon de midi
(Je ne compte que les heures heureuses)
gothgothhh
Niveau 2
Niveau 2
Messages : 28
Enregistré le : ven. 19 août 2011 13:03
Status : Hors ligne

Re: Sauvegarde graphic => file

#3

Message par gothgothhh »

Ah oui là je dis totalement oui, j'imagine que c'est bien plus rapide que de prendre un screen ^^ merci énormement pour cette fonction
Répondre