Crée et initialise un objet Matrix à partir de six nombres qui définissent une transformation affine
#include <GDIPlus.au3>
_GDIPlus_MatrixCreate2 ( [$nM11 = 1 [, $nM12 = 1 [, $nM21 = 1 [, $nM22 = 1 [, $nDX = 0 [, $nDY = 0]]]]]] )
$nM11 | [optional] Un nombre réel qui spécifie l'élément de la première ligne et de la première colonne (mise à l'échelle horizontale). Par défaut, 1. |
$nM12 | [optionnel] Un nombre réel qui spécifie l'élément de la première ligne et de la deuxième colonne (mise à l'échelle verticale). Par défaut, 1. |
$nM21 | [optionnel] Un nombre réel qui spécifie l'élément de la seconde ligne et de la première colonne (cisaillement horizontal). Par défaut, 1. |
$nM22 | [optionnel] Un nombre réel qui spécifie l'élément de la seconde ligne et de la seconde colonne (cisaillement vertical). Par défaut, 1. |
$nDX | [optionnel] Un nombre réel qui spécifie l'élément de la troisième ligne et de la première colonne (translation horizontale). Par défaut, 0. |
$nDY | [optionnel] Un nombre réel qui spécifie l'élément de la troisième ligne et de la deuxième colonne (translation verticale). Par défaut, 0. |
Succès: | Retourne le handle du nouvel objet Matrix créé. |
Échec: | Retourne 0 et définit @error <> 0, @extended peut contenir le code d'erreur GPSTATUS ($GPID_ERR*). |
Consultez 'Transformations' -> https://msdn.microsoft.com/en-us/library/windows/desktop/ms533810(v=vs.85).aspx or 'Matrix Representation of Transformations' -> https://msdn.microsoft.com/en-us/library/windows/desktop/ms536397(v=vs.85).aspx.
_GDIPlus_MatrixCreate, _GDIPlus_MatrixDispose
Consultez GdipCreateMatrix2 dans la librairie MSDN.
#include <GDIPlus.au3> #include <GUIConstantsEx.au3> Example_1() Example_2() Func Example_1() Local $hGui = GUICreate("GDI+", 800, 400) GUISetBkColor(0x282828) GUISetState(@SW_SHOW) _GDIPlus_Startup() Local $hGraphics = _GDIPlus_GraphicsCreateFromHWND($hGui) Local $hMatrix_S = _GDIPlus_MatrixCreate2(2, 0, 0, 1, 0, 0) ;doublement horizontal Local $hMatrix_T = _GDIPlus_MatrixCreate2(1, 0, 0, 1, 50, 0) ;translation horizontale de 50 unités Local $hBrush_Line = _GDIPlus_LineBrushCreateFromRect(_GDIPlus_RectFCreate(0, 0, 200, 100), 0xFFFF0000, 0xFF0000FF, 1) _GDIPlus_GraphicsFillRect($hGraphics, 0, 0, 800, 100, $hBrush_Line) ;Remplit une large zone avec un pinceau dégradé (pas de transformation). _GDIPlus_LineBrushSetTransform($hBrush_Line, $hMatrix_S) ;applique la transformation de mise à l'échelle. _GDIPlus_GraphicsFillRect($hGraphics, 0, 150, 800, 100, $hBrush_Line) ;remplit une large zone avec un pinceau dégradé mis à l'échelle. _GDIPlus_LineBrushMultiplyTransform($hBrush_Line, $hMatrix_T) ;compose les transformations: mise à l'échelle d'abord suivi d'une translation. _GDIPlus_GraphicsFillRect($hGraphics, 0, 300, 800, 100, $hBrush_Line) ;remplit une large zone avec un pinceau dégradé mis à l'échelle et translaté. Do Until GUIGetMsg() = $GUI_EVENT_CLOSE _GDIPlus_MatrixDispose($hMatrix_S) _GDIPlus_MatrixDispose($hMatrix_T) _GDIPlus_BrushDispose($hBrush_Line) _GDIPlus_GraphicsDispose($hGraphics) _GDIPlus_Shutdown() GUIDelete($hGui) EndFunc ;==>Example_1 Func Example_2() Local $hGui = GUICreate("GDI+", 800, 400) GUISetBkColor(0x282828) GUISetState(@SW_SHOW) _GDIPlus_Startup() Local $hGraphics = _GDIPlus_GraphicsCreateFromHWND($hGui) Local $hBitmap = _GDIPlus_BitmapCreateFromScan0(800, 400) Local $hContext = _GDIPlus_ImageGetGraphicsContext($hBitmap) Local $hBrush_Line = _GDIPlus_LineBrushCreateFromRect(_GDIPlus_RectFCreate(0, 0, 200, 100), 0xFFFF0000, 0xFF0000FF) Local $hMatrix_S, $i = 0 Do $hMatrix_S = _GDIPlus_MatrixCreate2(2.5, 0, Cos($i / 200) * 10, 1, 0, Sin($i / 50) * 75) _GDIPlus_LineBrushSetTransform($hBrush_Line, $hMatrix_S) _GDIPlus_GraphicsFillRect($hContext, 0, 150, 800, 100, $hBrush_Line) _GDIPlus_GraphicsDrawImageRect($hGraphics, $hBitmap, 0, 0, 800, 400) _GDIPlus_MatrixDispose($hMatrix_S) $i += 1 Until GUIGetMsg() = $GUI_EVENT_CLOSE _GDIPlus_MatrixDispose($hMatrix_S) _GDIPlus_BrushDispose($hBrush_Line) _GDIPlus_GraphicsDispose($hContext) _GDIPlus_GraphicsDispose($hGraphics) _GDIPlus_BitmapDispose($hBitmap) _GDIPlus_Shutdown() GUIDelete($hGui) EndFunc ;==>Example_2