Crée un objet TextureBrush à partir d'une image, d'une définition de rectangle, et d'un ensemble de propriétés de l'image
#include <GDIPlus.au3>
_GDIPlus_TextureCreateIA ( $hImage, $nX, $nY, $nWidth, $nHeight [, $pImageAttributes = 0] )
$hImage | Handle de l'objet Image |
$nX | Coordonnée X la plus à gauche de la partie d'image qui doit être utilisée par ce pinceau |
$nY | Coordonnée Y la plus haute de la partie d'image qui doit être utilisée par ce pinceau |
$nWidth | Largeur du pinceau et largeur de la partie d'image qui doit être utilisée par ce pinceau |
$nHeight | Hauteur du pinceau et hauteur de la partie d'image qui doit être utilisée par ce pinceau |
$pImageAttributes | [optionnel] Handle de l'objet ImageAttributes qui contient des propriétés de l'image |
Succès: | Retourne le handle du nouvel objet TextureBrush. |
Échec: | Retourne False et définit @error <> 0, @extended contient le code erreur GPSTATUS ($GPID_ERR*). |
Lorsque vous en avez terminé avec l'objet, appelez _GDIPlus_BrushDispose() pour libérer les ressources de l'objet.
_GDIPlus_BrushDispose, _GDIPlus_ImageAttributesCreate, _GDIPlus_ImageAttributesDispose
Consultez GdipCreateTextureIA dans la Librairie MSDN.
#include <GDIPlus.au3> #include <GUIConstantsEx.au3> #include <ScreenCapture.au3> #include <WinAPIHObj.au3> Global $g_hHBitmap, $g_hGfxCtxt, $g_hBMP, $g_hGfx Global $g_iTiles = 24, $g_a_hBmp_Tiles[$g_iTiles][$g_iTiles] Example() Func Example() AutoItSetOption("GUIOnEventMode", 1) Local $iW = 576, $iH = 576, $iTMP, $iSin = 0, $iMulti = 256 / $g_iTiles, $2Multi = 2 * $iMulti, _ $hCtxt, $hTextureIA, $fValue, $iFrameTimer = TimerInit() _GDIPlus_Startup() $g_hHBitmap = _ScreenCapture_Capture("", 0, 0, $g_iTiles ^ 2, $g_iTiles ^ 2) ; capturer le bureau et l'enregistrer dans la mémoire au format GDI Local $hImage = _GDIPlus_BitmapCreateFromHBITMAP($g_hHBitmap) ; Convertir l'image bitmap GDI en bitmap GDI+ ; $Locale = iImgW _GDIPlus_ImageGetWidth ($Himage); Obtient la largeur de l'image ; $Locale = iImgH _GDIPlus_ImageGetHeight ($Himage); Obtient la hauteur de l'image Local $hGUI = GUICreate("GDI+ TextureIA", $iW, $iH) ; Crée une GUI $g_hGfx = _GDIPlus_GraphicsCreateFromHWND($hGUI) ; Crée un objet graphique pour l'affichage graphique GDI+ $g_hBMP = _GDIPlus_BitmapCreateFromGraphics($iW, $iH, $g_hGfx) ; Crée un objet bitmap à partir d'un objet graphique $g_hGfxCtxt = _GDIPlus_ImageGetGraphicsContext($g_hBMP) ; Obtient le contexte graphique de l'image/bitmap Local $hBitmap = _GDIPlus_BitmapCreateFromScan0($g_iTiles ^ 2, $g_iTiles ^ 2) ; Crée un bitmap vide (nécessaire plus tard pour créer la texture) Local $hContext = _GDIPlus_ImageGetGraphicsContext($hBitmap) ; Obtient le contexte graphique de l'image/bitmap _GDIPlus_GraphicsDrawImageRect($hContext, $hImage, 0, 0, $g_iTiles ^ 2, $g_iTiles ^ 2) ; Copie l'image dans le bitmap vide _GDIPlus_GraphicsDispose($hContext) ; Libére le handle du contexte graphique _GDIPlus_ImageDispose($hImage) ; Libère le handle de l'image Local $tCM = _GDIPlus_ColorMatrixCreateScale(0, 0, 0) ; Crée et initialise une matrice couleur de mise à l'échelle (matrice 5 x 5 homogène pour une transformation dans l'espace de dimension 4) -> voir http://msdn.microsoft.com/en- us/Librairie/windows/desktop/ms533875(v=vs.85).aspx Local $pImgAttr = _GDIPlus_ImageAttributesCreate() ; Crée un objet d'attributs d'image (nécessaire pour la manipulation des couleurs) Local $fSizeInv = 1 / $g_iTiles ; Crée $g_iTiles * $g_iTiles de petites images bitmaps (pavés) pour remplir avec des parties de l'image capturée For $iY = 0 To $g_iTiles - 1 For $iX = 0 To $g_iTiles - 1 $g_a_hBmp_Tiles[$iY][$iX] = _GDIPlus_BitmapCreateFromScan0($g_iTiles, $g_iTiles) ; Crée un bitmap vide $hCtxt = _GDIPlus_ImageGetGraphicsContext($g_a_hBmp_Tiles[$iY][$iX]) ; Obtient le contexte graphique de l'image/bitmap $fValue = BitXOR($iX, $iY) * $fSizeInv $tCM.m(1) = 1 - $fValue ; rouge $tCM.m(7) = $fValue ; vert $tCM.m(19) = 0.4 ; alpha _GDIPlus_ImageAttributesSetColorMatrix($pImgAttr, 0, True, $tCM) ; Ajuste la matrice couleur ImageAttribute pour chaque bitmap $hTextureIA = _GDIPlus_TextureCreateIA($hBitmap, $iX * $g_iTiles, $iY * $g_iTiles, $g_iTiles, $g_iTiles, $pImgAttr) ; Crée un objet TextureBrush à partir d'une image avec des attributs d'image modifiées _GDIPlus_GraphicsFillRect($hCtxt, 0, 0, $g_iTiles, $g_iTiles, $hTextureIA) ; Dessine un rectangle rempli avec des pavés manipulée de l'image dans le bitmap _GDIPlus_GraphicsDispose($hCtxt) ; Libére le handle du contexte graphique _GDIPlus_BrushDispose($hTextureIA) ; Libére la texture Next Next _GDIPlus_ImageAttributesDispose($pImgAttr) ; Libère l'objet ImageAttributes GUISetOnEvent($GUI_EVENT_CLOSE, "_Exit", $hGUI) GUISetState(@SW_SHOW, $hGUI) While Sleep(10) $iSin += 25 / (1000 / TimerDiff($iFrameTimer)) _GDIPlus_GraphicsClear($g_hGfxCtxt, 0xB0808080) ; Efface l'objet graphique avec une couleur spécifiée For $iX = 0 To $g_iTiles - 1 $iTMP = 2 * $iX * $iMulti For $iY = 0 To $g_iTiles - 1 ; Déplace chaque mosaïque à sa nouvelle position _GDIPlus_GraphicsDrawImageRect($g_hGfxCtxt, $g_a_hBmp_Tiles[$iY][$iX], _ ; Handle de bitmap 25 + 15 * Sin($iY * $iMulti / 64 + $iSin) + $iTMP, _ ; x pos 15 * Cos($iX * $iMulti / 64 + $iSin) + 25 + $iY * $2Multi, _ ; y pos $2Multi, _ ; largeur $2Multi) ; hauteur Next Next _GDIPlus_GraphicsDrawImage($g_hGfx, $g_hBMP, 0, 0) ; Dessine l'image complète dans la GUI $iFrameTimer = TimerInit() WEnd EndFunc ;==>Example Func _Exit() ; Nettoie les ressources _WinAPI_DeleteObject($g_hHBitmap) _GDIPlus_GraphicsDispose($g_hGfxCtxt) _GDIPlus_BitmapDispose($g_hBMP) _GDIPlus_GraphicsDispose($g_hGfx) For $iY = 0 To $g_iTiles - 1 For $iX = 0 To $g_iTiles - 1 _GDIPlus_BitmapDispose($g_a_hBmp_Tiles[$iY][$iX]) Next Next _GDIPlus_Shutdown() Exit EndFunc ;==>_Exit