UDF > GDIPlus > Matrix >


_GDIPlus_MatrixCreate2

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]]]]]] )

Paramètres

$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.

Valeur de retour

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*).

Remarque

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.

En relation

_GDIPlus_MatrixCreate, _GDIPlus_MatrixDispose

Voir aussi

Consultez GdipCreateMatrix2 dans la librairie MSDN.

Exemple

#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