Przejdź do zawartości

AutoIt/Funkcje interfejsu GDI+

Z Wikibooks, biblioteki wolnych podręczników.

Co to jest GDI?

[edytuj]

Za Wiki:

GDI (Graphics Device Interface) jeden z trzech podstawowych komponentów (razem z jądrem i API Windows) interfejsu użytkownika (menedżera okien GDI) w Microsoft Windows. GDI odpowiedzialne jest za przedstawianie obiektów graficznych i przesyłanie ich do urządzeń wyjściowych, takich jak monitory i drukarki.

Zestaw funkcji GDI umożliwia:

- zarządzanie kontekstem urządzenia (jego tworzeniem, zwalnianiem, odczytem i ustawianiem jego atrybutów),

- rysowanie (wyświetlanie tekstów, linii, prostokątów, bitmap itp.),

- określanie cech obiektów rysujących.

Począwszy od Windows XP, GDI jest zastępowane przez GDI+. Wbudowane funkcje AutoIt'a nie wykorzystują nowych możliwości tego interfejsu.

Aby z nich skorzystać należy użyć standardowego UDF'u zawartego w pliku GDIPlus.au3. Biblioteka zawiera wiele funkcji znacznie powiększających możliwości graficzne języka.


Kontekst urządzenia - Device context (DC)

[edytuj]

Operacje graficzne w systemie Windows wykonywane są nie bezpośrednio na obiekcie ale na tzw. kontekście urządzenia. Dzięki wprowadzeniu kontekstu urządzenia możliwe stało się ujednolicenie funkcji graficznych zawartych w API. Każda z funkcji operuje na konkretnym kontekście urządzenia, który w rzeczywistości może oznaczać ekran monitora, drukarkę, czy też mapę bitową utworzoną w pamięci. Zrozumiałe jest, że nie każda operacja graficzna jest możliwa do wykonania na każdym kontekście urządzenia.

Każdy kontekst urządzenia pomiędzy kolejnymi operacjami graficznymi pamięta wszystkie atrybuty, jakie poprzednio stosowaliśmy. Dzięki temu nie musimy za każdym razem tworzyć lub wybierać pióra do rysowania linii, pędzla do malowania obszarów, czy czcionki do pisania tekstu. W każdej chwili możemy w danym kontekście urządzenia użyć inne, nowe pióro, inny pędzel, czy czcionkę równocześnie zmieniając kolor narzędzia, tła, wielkość i inne atrybuty.

Ponieważ w systemie Windows nie istnieje standardowe urządzenie graficzne, na którym moglibyśmy wykonywać operacje graficzne, za każdym razem, gdy chcemy coś narysować, musimy pobrać z systemu Windows kontekst urządzenia. Pobranie kontekstu urządzenia, to nic innego jak uzyskanie z systemu Windows identyfikatora kontekstu urządzenia. Takim identyfikatorem jest uchwyt kontekstu urządzenia hdc.

Identyfikowany poprzez swój uchwyt kontekst urządzenia jest strukturą zarządzaną przez system Windows i zawierającą nie tylko obiekt przeznaczony do wykonywanych operacji graficznych, ale przechowującą również wiele informacji o obiektach rysujących i parametrach określających tryby stosowane przez funkcje GDI podczas rysowania w kontekście urządzenia.

Należy mieć świadomość, że wszystkie funkcje GDI działają na kontekstach urządzeń, nawet jeżeli w sposób jawny nie odwołują się do nich.


Tworzenie szkieletu

[edytuj]

Poniższe dwie funkcje (_GDIPlus_Startup i _GDIPlus_Shutdown) tworzą w programie blok, wewnątrz którego można korzystać z innych funkcji interfejsu GDI+.

_GDIPlus_Startup

[edytuj]
#include <GDIPlus.au3>
_GDIPlus_Startup()

Funkcja inicjuje interfejs GDI+. Zwraca TRUE gdy sukces, lub FALSE gdy wystąpił błąd.

Nie przyjmuje żadnych parametrów.

Funkcja ta musi zostać użyta przed użyciem innych funkcji korzystających z interfejsu GDI+.


_GDIPlus_Shutdown

[edytuj]
#include <GDIPlus.au3>
_GDIPlus_Shutdown()

Funkcja zamyka dostęp do interfejsu GDI+. Zwraca TRUE gdy sukces, lub FALSE gdy wystąpił błąd.

Nie przyjmuje żadnych parametrów.

Funkcji tej należy użyć po zakończeniu korzystania z GDI+, celem zwolnienia zasobów. Przedtem należy zlikwidować wszystkie utworzone obiekty graficzne (funkcjami _GDIPlus_...Dispose).

Szkielet bloku programu korzystającego z funkcji GDI+:

#include <GDIPlus.au3>
_GDIPlus_Startup()

;blok programu korzystający z interfejsu GDI+

_GDIPlus_Shutdown()


Tworzenie zasobów

[edytuj]

Obiekt graphics (obszar rysowania)

[edytuj]

_GDIPlus_GraphicsCreateFromHWND

[edytuj]
#include <GDIPlus.au3>
_GDIPlus_GraphicsCreateFromHWND($hWnd)

Funkcja tworzy obiekt graphics w oknie (lub kontrolce) o podanym uchwycie. Zwraca uchwyt do tego obiektu, lub 0 gdy wystąpił błąd.

W obiekcie tym można następnie umieszczać inne obiekty graficzne (np. odcinki, elipsy, krzywe, teksty, itp.). Jest to jakby przestrzeń do rysowania.

$hWnd - uchwyt do okna lub kontrolki

UWAGA: Funkcja umożliwia umieszczanie elementów graficznych w dowolnym oknie (jeżeli tylko znamy uchwyt do niego), a nie tylko w oknie skryptu.

Likwidacja obiektu za pomocą _GDIPlus_GraphicsDispose.

Przykład:

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

;tworzenie GUI
$hGUI = GUICreate("GDI+", 400, 300)
GUISetState()

_GDIPlus_Startup()

;tworzenie obiektu graficznego na oknie
$hGraphic = _GDIPlus_GraphicsCreateFromHWND($hGUI)

_GDIPlus_GraphicsDrawString($hGraphic, "Witajcie!", 150, 150)

Do
Until GUIGetMsg() = $GUI_EVENT_CLOSE

;zwolnienie zasobów
_GDIPlus_GraphicsDispose($hGraphic)
_GDIPlus_Shutdown()


_GDIPlus_GraphicsCreateFromHDC

[edytuj]
#include <GDIPlus.au3>
_GDIPlus_GraphicsCreateFromHDC($hDC)

Funkcja tworzy obiekt graphics na kontekście urządzenia o podanym uchwycie. Zwraca uchwyt do tego obiektu, lub 0 gdy wystąpił błąd.

$hDC - uchwyt do kontekstu urządzenia, dla okna jest zwracany przez funkcję _WinAPI_GetWindowDC (UDF WinAPI.au3)

Likwidacja obiektu za pomocą _GDIPlus_GraphicsDispose.

Przykład:

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

;tworzenie GUI
$hGUI = GUICreate("GDI+", 400, 300)
GUISetState()

;pobranie uchwytu do kontekstu okna
$hDC = _WinAPI_GetWindowDC($hGUI)


_GDIPlus_Startup()
;tworzenie obiektu graficznego na kontekście okna
$hGraphic = _GDIPlus_GraphicsCreateFromHDC($hDC)


_GDIPlus_GraphicsDrawString($hGraphic, "Witajcie!", 150, 150)

Do
Until GUIGetMsg() = $GUI_EVENT_CLOSE

;zwolnienie zasobów
_GDIPlus_GraphicsDispose($hGraphic)
_WinAPI_ReleaseDC($hGUI, $hDC)
_GDIPlus_Shutdown()


_GDIPlus_GraphicsDispose

[edytuj]
#include <GDIPlus.au3>
_GDIPlus_GraphicsDispose($hGraphics)

Funkcja likwiduje obiekt graphics utworzony przez _GDIPlus_GraphicsCreateFromHWND. Zwraca TRUE gdy sukces, lub FALSE gdy wystąpił błąd.

$hGraphics - uchwyt do obiektu zwracany przez _GDIPlus_GraphicsCreateFromHWND i _GDIPlus_GraphicsCreateFromHDC


Obiekt pen (pióro)

[edytuj]

Poniższy zestaw funkcji służy do tworzenia wirtualnego pióra, nadawania i odczytywania jego właściwości (kolor, szerokość i rodzaj rysowanej linii, sposób jej zakończenia i położenie względem konturu teoretycznego).

Piórem tym można następnie rysować różna obiekty graficzne jak odcinki, krzywe, wielokąty, okręgi, elipsy itp.


_GDIPlus_PenCreate

[edytuj]
#include <GDIPlus.au3>
_GDIPlus_PenCreate([$iARGB = 0xFF000000 [, $nWidth = 1 [, $iUnit = 2]]])

Funkcja tworzy pióro, którym będzie można rysować różne obiekty graficzne. Zwraca uchwyt do pióra, lub 0 gdy wystąpił błąd.

$iARGB - składowe koloru pędzla, po dwa bajty aarrggbb (np. 0xEEFF1055), gdzie:

aa - przezroczystość (kanał alfa) od 00 (całkowicie przezroczysty) do FF (całkowicie nieprzezroczysty)

rr, gg, bb - składowe poszczególnych kolorów RGB, wartości od 00 do FF

Wartość domyślna (0xFF000000) to całkowicie nieprzezroczysty kolor czarny.

$nWidth - szerokość pióra w jednostkach określonych przez $iUnit, domyślnie 1 jednostka

$iUnit - jednostka szerokości pióra, domyślnie 2 piksele

Likwidacja obiektu za pomocą _GDIPlus_PenDispose.


_GDIPlus_PenCreate2

[edytuj]
#include <GDIPlus.au3>
_GDIPlus_PenCreate2 ( $hBrush [, $fWidth = 1 [, $iUnit = 2]] )

Funkcja tworzy pióro na podstawie atrybutów wcześniej zdefiniowanego pędzla. Zwraca uchwyt do pióra, lub 0 gdy wystąpił błąd.

$hBrush - uchwyt do pędzla

$nWidth - szerokość pióra w jednostkach określonych przez $iUnit, domyślnie 1 jednostka

$iUnit - jednostka szerokości pióra, domyślnie 2 piksele

Przykład:

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

$hGUI = GUICreate("Elipsa spektrum", 600, 200)
GUISetBkColor(0, $hGUI)
GUISetState()

_GDIPlus_Startup()
$hGraphics = _GDIPlus_GraphicsCreateFromHWND($hGUI)

$tRectF = _GDIPlus_RectFCreate(0, 0, 600, 200)

;tworzenie pędzla z gradientem liniowym
$hBrush = _GDIPlus_LineBrushCreateFromRect($tRectF, 0, 0, 0, 1)

;tablica z danymi gradientu wielokolorowego
Dim $aInterpolations[6][2]
$aInterpolations[0][0] = 5
$aInterpolations[1][0] = 0xFFD00000 ;Czerwony
$aInterpolations[1][1] = 0
$aInterpolations[2][0] = 0xFFFFFF00 ;Żółty
$aInterpolations[2][1] = 0.25
$aInterpolations[3][0] = 0xFF00FF00 ;Zielony
$aInterpolations[3][1] = 0.5
$aInterpolations[4][0] = 0xFF0080FF ;Niebieski
$aInterpolations[4][1] = 0.75
$aInterpolations[5][0] = 0xFF7000A0 ;Fioletowy
$aInterpolations[5][1] = 1
_GDIPlus_LineBrushSetPresetBlend($hBrush, $aInterpolations)

$hPen = _GDIPlus_PenCreate2($hBrush, 10) ;utworzenie pióra na podstawie atrybutów pędzla

_GDIPlus_GraphicsDrawEllipse($hGraphics, 10, 10, 580, 180, $hPen) ;rysowanie elipsy

Do
Until GUIGetMsg() = $GUI_EVENT_CLOSE

_GDIPlus_PenDispose($hPen)
_GDIPlus_BrushDispose($hBrush)
_GDIPlus_GraphicsDispose($hGraphics)
_GDIPlus_Shutdown()
GUIDelete($hGUI)


_GDIPlus_PenDispose

[edytuj]
#include <GDIPlus.au3>
_GDIPlus_PenDispose($hPen)

Funkcja likwiduje pióro utworzony przez _GDIPlus_PenCreate. Zwraca TRUE gdy sukces, lub FALSE gdy wystąpił błąd.

$hPen - uchwyt do pióra zwrócony przez _GDIPlus_PenCreate


_GDIPlus_PenSetColor

[edytuj]
#include <GDIPlus.au3>
_GDIPlus_PenSetColor($hPen, $iARGB)

Funkcja zmienia kolor pióra. Zwraca TRUE gdy sukces, lub FALSE gdy wystąpił błąd.

$hPen - uchwyt do pióra zwrócony przez _GDIPlus_PenCreate

$iARGB - składowe koloru pędzla, po dwa bajty aarrggbb (np. 0xEEFF1055), gdzie:

aa - przezroczystość (kanał alfa) od 00 (całkowicie przezroczysty) do FF (całkowicie nieprzezroczysty)

rr, gg, bb - składowe poszczególnych kolorów RGB, wartości od 00 do FF

_GDIPlus_PenGetColor

[edytuj]
#include <GDIPlus.au3>
_GDIPlus_PenGetColor($hPen)

Funkcja odczytuje kolor pióra. Zwraca kod koloru (format jak w _GDIPlus_PenSetColor), lub -1 gdy wystąpił błąd.

$hPen - uchwyt do pióra zwrócony przez _GDIPlus_PenCreate


_GDIPlus_PenSetWidth

[edytuj]
#include <GDIPlus.au3>
_GDIPlus_PenSetWidth($hPen, $fWidth)

Funkcja zmienia szerokość pióra. Zwraca TRUE gdy sukces, lub FALSE gdy wystąpił błąd.

$hPen - uchwyt do pióra zwrócony przez _GDIPlus_PenCreate

$fWidth - szerokość pióra


_GDIPlus_PenGetWidth

[edytuj]
#include <GDIPlus.au3>
_GDIPlus_PenGetWidth($hPen)

Funkcja odczytuje i zwraca szerokość pióra. Jeżeli wystąpi błąd zwraca -1.

$hPen - uchwyt do pióra zwrócony przez _GDIPlus_PenCreate


_GDIPlus_PenSetEndCap

[edytuj]
#include <GDIPlus.au3>
_GDIPlus_PenSetEndCap($hPen, $iEndCap)

Funkcja zmienia rodzaj zakończenia linii rysowanej piórem. Zwraca TRUE gdy sukces, lub FALSE gdy wystąpił błąd.

$hPen - uchwyt do pióra zwrócony przez _GDIPlus_PenCreate

$iEndCap - kod rodzaju zakończenia lini:

$GDIP_LINECAPFLAT - zakończenie płaskie
$GDIP_LINECAPSQUARE - kwadrat o wymiarach grubości pióra
$GDIP_LINECAPROUND - półkole
$GDIP_LINECAPTRIANGLE - trójkąt
$GDIP_LINECAPNOANCHOR - bez zakończenia
$GDIP_LINECAPSQUAREANCHOR - kwadrat
$GDIP_LINECAPROUNDANCHOR - koło
$GDIP_LINECAPDIAMONDANCHOR - diament
$GDIP_LINECAPARROWANCHOR - grot strzałki
$GDIP_LINECAPCUSTOM - niestandardowe, zdefiniowane przez _GDIPlus_PenSetCustomEndCap

Przykład:

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

;tworzenie GUI
$hGUI = GUICreate("GDI+", 410, 350)
GUISetState()

;tworzenie obiektów graficznych
_GDIPlus_Startup()
$hGraphic = _GDIPlus_GraphicsCreateFromHWND($hGUI)
$hPen = _GDIPlus_PenCreate(0xFF000000, 12)

;rysowanie odcinków różnie zakńczonych
_GDIPlus_PenSetEndCap($hPen, $GDIP_LINECAPFLAT)
_GDIPlus_GraphicsDrawLine($hGraphic, 10, 30, 390, 30, $hPen)
_GDIPlus_PenSetEndCap($hPen, $GDIP_LINECAPSQUARE)
_GDIPlus_GraphicsDrawLine($hGraphic, 10, 60, 390, 60, $hPen)
_GDIPlus_PenSetEndCap($hPen, $GDIP_LINECAPROUND )
_GDIPlus_GraphicsDrawLine($hGraphic, 10, 90, 390, 90, $hPen)
_GDIPlus_PenSetEndCap($hPen, $GDIP_LINECAPTRIANGLE)
_GDIPlus_GraphicsDrawLine($hGraphic, 10, 120, 390, 120, $hPen)
_GDIPlus_PenSetEndCap($hPen, $GDIP_LINECAPNOANCHOR)
_GDIPlus_GraphicsDrawLine($hGraphic, 10, 150, 390, 150, $hPen)
_GDIPlus_PenSetEndCap($hPen, $GDIP_LINECAPSQUAREANCHOR)
_GDIPlus_GraphicsDrawLine($hGraphic, 10, 180, 390, 180, $hPen)
_GDIPlus_PenSetEndCap($hPen, $GDIP_LINECAPROUNDANCHOR)
_GDIPlus_GraphicsDrawLine($hGraphic, 10, 210, 390, 210, $hPen)
_GDIPlus_PenSetEndCap($hPen, $GDIP_LINECAPDIAMONDANCHOR)
_GDIPlus_GraphicsDrawLine($hGraphic, 10, 240, 390, 240, $hPen)
_GDIPlus_PenSetEndCap($hPen, $GDIP_LINECAPARROWANCHOR)
_GDIPlus_GraphicsDrawLine($hGraphic, 10, 270, 390, 270, $hPen)
_GDIPlus_PenSetEndCap($hPen, $GDIP_LINECAPCUSTOM)
_GDIPlus_GraphicsDrawLine($hGraphic, 10, 300, 390, 300, $hPen)

Do
Until GUIGetMsg() = $GUI_EVENT_CLOSE

;zwolnienie zasobów
_GDIPlus_PenDispose($hPen)
_GDIPlus_GraphicsDispose($hGraphic)
_GDIPlus_Shutdown()


_GDIPlus_PenGetEndCap

[edytuj]
#include <GDIPlus.au3>
_GDIPlus_PenGetEndCap($hPen)

Funkcja odczytuje rodzaj zakończenia linii rysowanej piórem. Zwraca kod zakończenia (wartości jak w _GDIPlus_PenSetEndCap), lub -1 gdy wystąpił błąd.

$hPen - uchwyt do pióra zwrócony przez _GDIPlus_PenCreate


_GDIPlus_PenSetStartCap

[edytuj]
#include <GDIPlus.au3>
_GDIPlus_PenSetStartCap ( $hPen, $iLineCap )

Funkcja zmienia rodzaj początku linii rysowanej piórem. Zwraca TRUE gdy sukces, lub FALSE gdy wystąpił błąd.

$hPen - uchwyt do pióra

$iLineCap - określa wygląd początku linii rysowanej piórem:

0x00 - linia równo obcięta, bez dodatkowego zakończenie

0x01 - linia rozpoczęta prostokątem o długości równej połowie szerokości pióra

0x02 - linia rozpoczęta półkolem o promieniu równym połowie grubości pióra

0x03 - linia rozpoczęta trójkątem równobocznym o wysokości równej połowie grubości pióra

0x10 - jak 0x00

0x11 - linia rozpoczęta kwadratem, środek kwadratu w punkcie początkowym linii

0x12 - linia rozpoczęta kołem, środek koła w punkcie początkowym linii

0x13 - linia rozpoczęta kwadratem, środek kwadratu w punkcie początkowym linii, przekątna kwadratu wzdłuż osi linii

0x14 - linia rozpoczęta od grotu strzałki, ostrze grotu w punkcie początkowym linii

0xFF - początek linii zdefiniowany w obiekcie CustomLineCap

Przykład:

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

$hGUI = GUICreate("GDI+", 450, 800)
GUISetState()

_GDIPlus_Startup()
$hGraphic = _GDIPlus_GraphicsCreateFromHWND($hGUI)

$hPen = _GDIPlus_PenCreate(0xFFAA00FF, 40)

Local $aTab[] = [0, 1, 2, 3, 0x10, 0x11, 0x12, 0x13, 0x14, 0xff]

For $iLineCap  In $aTab
   _GDIPlus_GraphicsDrawString($hGraphic, "LineCap = " & $iLineCap, 30, 35)
   _GDIPlus_PenSetStartCap($hPen, $iLineCap )
   _GDIPlus_GraphicsDrawLine($hGraphic, 200, 40, 400, 40, $hPen)
   _GDIPlus_GraphicsTranslateTransform($hGraphic, 0, 80)
Next

Do
Until GUIGetMsg() = $GUI_EVENT_CLOSE

_GDIPlus_PenDispose($hPen)
_GDIPlus_GraphicsDispose($hGraphic)
_GDIPlus_Shutdown()


_GDIPlus_PenSetCustomEndCap

[edytuj]
#include <GDIPlus.au3>
_GDIPlus_PenSetCustomEndCap($hPen, $hEndCap)

Funkcja ustala niestandardowe zakończenie linii. Zwraca TRUE gdy sukces, lub FALSE gdy wystąpił błąd.

$hPen - uchwyt do pióra zwrócony przez _GDIPlus_PenCreate

$hEndCap - uchwyt do obiektu będącym niestandardowym zakończeniem linii

Przykład:

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

;tworzenie GUI
$hGUI = GUICreate("GDI+", 600, 600)
$gr=GUICtrlCreateGraphic(150,200,400,300)
GUICtrlSetBkColor($gr,0xffff00)         ;kolor tła okienka
GUICtrlSetColor($gr,0)
GUISetState()

;tworzenie zasobów
_GDIPlus_Startup()
$hGraphic = _GDIPlus_GraphicsCreateFromHWND(ControlGetHandle("","",$gr))
$hPen = _GDIPlus_PenCreate(0xFF0000FF, 2)

;tworzenie niestandardowego zakończenia w postaci grotu strzałki
$hEndCap = _GDIPlus_ArrowCapCreate(6, 6)
_GDIPlus_PenSetCustomEndCap($hPen, $hEndCap)

;rysownie strzałek
_GDIPlus_GraphicsDrawLine($hGraphic, 10, 120, 390, 120, $hPen)
_GDIPlus_PenSetWidth($hPen, 4)
_GDIPlus_GraphicsDrawLine($hGraphic, 390, 150, 10, 50, $hPen)
_GDIPlus_PenSetWidth($hPen, 6)
_GDIPlus_GraphicsDrawLine($hGraphic, 10, 180, 390, 180, $hPen)

Do
Until GUIGetMsg() = $GUI_EVENT_CLOSE

;zwolnienie zasobów
_GDIPlus_ArrowCapDispose($hEndCap)
_GDIPlus_PenDispose($hPen)
_GDIPlus_GraphicsDispose($hGraphic)
_GDIPlus_Shutdown()


_GDIPlus_PenGetCustomEndCap

[edytuj]
#include <GDIPlus.au3>
_GDIPlus_PenGetCustomEndCap($hPen)

Funkcja odczytuje i zwraca uchwyt do obiektu graficznego będącego niestandardowym zakończeniem linii. Jeżeli wystąpi błąd zwracane jest 0.

$hPen - uchwyt do pióra zwrócony przez _GDIPlus_PenCreate


_GDIPlus_PenSetDashStyle

[edytuj]
#include <GDIPlus.au3>
_GDIPlus_PenSetDashStyle($hPen [, $iStyle = 0])

Funkcja zmienia rodzaj linii rysowanej piórem. Zwraca TRUE gdy sukces, lub FALSE gdy wystąpił błąd.

$hPen - uchwyt do pióra zwrócony przez _GDIPlus_PenCreate

$iStyle - kod rodzaju lini:

$GDIP_DASHSTYLESOLID - ciągła
$GDIP_DASHSTYLEDASH - przerywana
$GDIP_DASHSTYLEDOT - punktowa
$GDIP_DASHSTYLEDASHDOT - przerywano - punktowa
$GDIP_DASHSTYLEDASHDOTDOT - przerywano - dwupunktowa 
$GDIP_DASHSTYLECUSTOM - zdefiniowana przez użytkownika

UWAGA: - w UDF'ie brak funkcji do definiowania rodzaju linii.

Przykład:

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

;tworzenie GUI
$hGUI = GUICreate("GDI+", 400, 300)
GUISetState()

;tworzenie zasobów
_GDIPlus_Startup()
$hGraphic = _GDIPlus_GraphicsCreateFromHWND($hGUI)
$hPen = _GDIPlus_PenCreate(0xFF000000, 8)

;rysowanie różnych rodzajów lini
_GDIPlus_PenSetDashStyle($hPen, $GDIP_DASHSTYLESOLID)
_GDIPlus_GraphicsDrawLine($hGraphic, 10, 50, 390, 50, $hPen)

_GDIPlus_PenSetDashStyle($hPen, $GDIP_DASHSTYLEDASH)
_GDIPlus_GraphicsDrawLine($hGraphic, 10, 80, 390, 80, $hPen)

_GDIPlus_PenSetDashStyle($hPen, $GDIP_DASHSTYLEDOT)
_GDIPlus_GraphicsDrawLine($hGraphic, 10, 110, 390, 110, $hPen)

_GDIPlus_PenSetDashStyle($hPen, $GDIP_DASHSTYLEDASHDOT)
_GDIPlus_GraphicsDrawLine($hGraphic, 10, 140, 390, 140, $hPen)

_GDIPlus_PenSetDashStyle($hPen, $GDIP_DASHSTYLEDASHDOTDOT)
_GDIPlus_GraphicsDrawLine($hGraphic, 10, 170, 390, 170, $hPen)

_GDIPlus_PenSetDashStyle($hPen, $GDIP_DASHSTYLECUSTOM)
_GDIPlus_GraphicsDrawLine($hGraphic, 10, 200, 390, 200, $hPen)

Do
Until GUIGetMsg() = $GUI_EVENT_CLOSE

;zwolnienie zasobów
_GDIPlus_PenDispose($hPen)
_GDIPlus_GraphicsDispose($hGraphic)
_GDIPlus_Shutdown()


_GDIPlus_PenGetDashStyle

[edytuj]
#include <GDIPlus.au3>
_GDIPlus_PenGetDashStyle($hPen)

Funkcja zwraca kod rodzaju rysowanej przez pióro linii (wartości jak dla _GDIPlus_PenSetDashStyle), lub -1 gdy wystąpił błąd.

$hPen - uchwyt do pióra zwrócony przez _GDIPlus_PenCreate

_GDIPlus_PenSetAlignment

[edytuj]
#include <GDIPlus.au3>
_GDIPlus_PenSetAlignment($hPen [, $iAlignment = 0])

Funkcja ustala położenie rysowanej linii względem konturu teoretycznego. Zwraca TRUE gdy sukces, lub FALSE gdy wystąpił błąd.

Funkcja ma zastosowanie tylko do konturów zamkniętych.

$hPen - uchwyt do pióra zwrócony przez _GDIPlus_PenCreate

$iAlignment - 0 symetrycznie względem konturu teoretycznego, 1 do wnętrza figury

Przykład:

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

;tworzenie GUI
$hGUI = GUICreate("GDI+", 400, 400)
GUISetState()

;tworzenie zasobów
_GDIPlus_Startup()
$hGraphic = _GDIPlus_GraphicsCreateFromHWND($hGUI)
$hPen = _GDIPlus_PenCreate(0xFF000000, 18)

;rysowanie elips
_GDIPlus_PenSetAlignment($hPen, 1)
_GDIPlus_GraphicsDrawEllipse($hGraphic, 130, 100, 140, 70, $hPen)

_GDIPlus_PenSetAlignment($hPen, 0)
_GDIPlus_GraphicsDrawEllipse($hGraphic, 130, 200, 140, 70, $hPen)


Do
Until GUIGetMsg() = $GUI_EVENT_CLOSE

;zwolnienie zasobów
_GDIPlus_GraphicsDispose($hGraphic)
_GDIPlus_Shutdown()


_GDIPlus_PenGetAlignment

[edytuj]
#include <GDIPlus.au3>
_GDIPlus_PenGetAlignment($hPen)

Funkcja zwraca kod położenia linii względem konturu teoretycznego (0 symetrycznie względem konturu teoretycznego, 1 do wnętrza figury), lub -1 gdy wystąpił błąd.

$hPen - uchwyt do pióra zwrócony przez _GDIPlus_PenCreate


_GDIPlus_PenSetLineCap

[edytuj]
#include <GDIPlus.au3>
_GDIPlus_PenSetLineCap ( $hPen, $iStartCap, $iEndCap, $iDashCap )

Funkcja ustawia rodzaj linii oraz rodzaj jej rozpoczęcia i zakończenia. Zwraca True gdy sukces, lub False gdy wystąpił błąd.

$hPen - uchwyt do pióra

$iStartCap, $iEndCap - określają rodzaj rozpoczęcia i zakończenia linii:

0x00 - linia równo obcięta, bez dodatkowego elementów

0x01 - linia rozpoczęta (zakończona) prostokątem o długości równej połowie szerokości pióra

0x02 - linia rozpoczęta (zakończona) półkolem o promieniu równym połowie grubości pióra

0x03 - linia rozpoczęta (zakończona) trójkątem równobocznym o wysokości równej połowie grubości pióra

0x10 - jak 0x00

0x11 - linia rozpoczęta (zakończona) kwadratem, środek kwadratu w punkcie początkowym linii

0x12 - linia rozpoczęta (zakończona) kołem, środek koła w punkcie początkowym linii

0x13 - linia rozpoczęta (zakończona) kwadratem, środek kwadratu w punkcie początkowym linii, przekątna kwadratu wzdłuż osi linii

0x14 - linia rozpoczęta (zakończona) od grotu strzałki, ostrze grotu w punkcie początkowym linii

0xFF - początek (koniec) linii zdefiniowany w obiekcie CustomLineCap

$iDashCap - określa sposób zakończenia odcinków linii przerywanej:

0 - proste

2 - zaokrąglone

3 - trójkątne

Przykład:

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

$hGUI = GUICreate("GDI+", 700, 750)
GUISetState()

_GDIPlus_Startup()
$hGraphic = _GDIPlus_GraphicsCreateFromHWND($hGUI)

$hPen = _GDIPlus_PenCreate(0xFFAA00FF, 20)
_GDIPlus_PenSetDashStyle($hPen, $GDIP_DASHSTYLEDASH)

Local $aTab[] = [0, 1, 2, 3, 0x10, 0x11, 0x12, 0x13, 0x14]

For $iLineCap  In $aTab
   _GDIPlus_GraphicsDrawString($hGraphic, "LineCap = " & $iLineCap, 30, 35)
   $iEndCap =  $iLineCap
   _GDIPlus_PenSetLineCap($hPen, $iLineCap, $iEndCap, 2)
   _GDIPlus_GraphicsDrawLine($hGraphic, 200, 40, 600, 40, $hPen)
   _GDIPlus_GraphicsTranslateTransform($hGraphic, 0, 80)
Next

Do
Until GUIGetMsg() = $GUI_EVENT_CLOSE

_GDIPlus_PenDispose($hPen)
_GDIPlus_GraphicsDispose($hGraphic)
_GDIPlus_Shutdown()


_GDIPlus_PenSetLineJoin

[edytuj]
#include <GDIPlus.au3>
_GDIPlus_PenSetLineJoin ( $hPen, $iLineJoin )

Funkcja ustawia kształt łączenia linii rysowanych piórem. Zwraca True gdy sukces, lub False gdy wystąpił błąd.

$hPen - uchwyt do pióra

$iLineJoin - współczynnik określający kształt łączenia linii:

0 - ostry lub przycięty narożnik, zależnie od ustawienia funkcji _GDIPlus_PenSetMiterLimit

1 - ścięty narożnik

2 - zaokrąglony narożnik

3 - ostry lub przycięty narożnik, zależnie od ustawienia funkcji _GDIPlus_PenSetMiterLimit i kąta między liniami

Przykład:

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

$hGUI = GUICreate("GDI+", 900, 650)
GUISetState()

_GDIPlus_Startup()
$hGraphic = _GDIPlus_GraphicsCreateFromHWND($hGUI)

_GDIPlus_GraphicsSetSmoothingMode($hGraphic, 2) ;wygładzenie linni

$hPath = _GDIPlus_PathCreate() ;tworzenie ścieżki
_GDIPlus_PathAddLine($hPath, 50, 550, 70, 200)
_GDIPlus_PathAddLine($hPath, 70, 200, 130, 550)
_GDIPlus_PathAddLine($hPath, 130, 550, 220, 400)


$fPenWidth = 28

$hPen1 = _GDIPlus_PenCreate(0xFF000000, 1)
$hPen = _GDIPlus_PenCreate(0xFFFF0000, $fPenWidth)

_GDIPlus_PenSetMiterLimit($hPen, 8)

For $i = 0 To 3
   _GDIPlus_GraphicsDrawString($hGraphic, "LineJoin = " & $i, 30, 30)
   _GDIPlus_PenSetLineJoin ($hPen, $i) ;ustawienie kształtu połączenia linii
   _GDIPlus_GraphicsDrawPath($hGraphic, $hPath, $hPen)
   _GDIPlus_GraphicsDrawPath($hGraphic, $hPath, $hPen1)
   _GDIPlus_GraphicsTranslateTransform($hGraphic, 220, 0) ;przesunięcie układu
Next

Do
Until GUIGetMsg() = $GUI_EVENT_CLOSE

_GDIPlus_PathDispose($hPath)
_GDIPlus_PenDispose($hPen)
_GDIPlus_PenDispose($hPen1)
_GDIPlus_GraphicsDispose($hGraphic)
_GDIPlus_Shutdown()


_GDIPlus_PenSetMiterLimit

[edytuj]
#include <GDIPlus.au3>
_GDIPlus_PenSetMiterLimit ( $hPen, $fMiterLimit )

Funkcja ustawia próg ścięcia pióra. Zwraca True gdy sukces, lub False gdy wystąpił błąd.

$hPen - uchwyt do pióra

$fMiterLimit - liczba rzeczywista określająca próg ścięcia pióra. Wartość od 1.0 w górę. Jeżeli wstawimy liczbę mniejszą to zostanie ona zastąpiona przez 1.0.


_GDIPlus_PenGetMiterLimit

[edytuj]
#include <GDIPlus.au3>
_GDIPlus_PenGetMiterLimit ( $hPen )

Funkcja zwraca wartość progu ścięcia pióra, lub -1 gdy wystąpił błąd.

$hPen - uchwyt do pióra

Przykład:

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

$hGUI = GUICreate("GDI+", 800, 600)
GUISetState()

_GDIPlus_Startup()
$hGraphic = _GDIPlus_GraphicsCreateFromHWND($hGUI)

_GDIPlus_GraphicsSetSmoothingMode($hGraphic, 2) ;wygładzenie linni

$hPath = _GDIPlus_PathCreate() ;tworzenie ścieżki
_GDIPlus_PathAddLine($hPath, 30, 550, 70, 200)
_GDIPlus_PathAddLine($hPath, 70, 200, 110, 550)

$fPenWidth = 28

$hPen1 = _GDIPlus_PenCreate(0xFF000000, 1)
For $i = 0 To 6
   _GDIPlus_GraphicsDrawLine($hGraphic, 0, 200 - $fPenWidth * 0.5 * $i, 800, 200 - $fPenWidth * 0.5 * $i, $hPen1)
Next

$hPen = _GDIPlus_PenCreate(0xFFFF0000, $fPenWidth)
For $i = 1 To 5
   _GDIPlus_PenSetMiterLimit($hPen, $i)
   _GDIPlus_GraphicsDrawString($hGraphic, "MiterLimit = " & _GDIPlus_PenGetMiterLimit($hPen), 20, 20)
   _GDIPlus_GraphicsDrawPath($hGraphic, $hPath, $hPen)
   _GDIPlus_GraphicsDrawPath($hGraphic, $hPath, $hPen1)
   _GDIPlus_GraphicsTranslateTransform($hGraphic, 130, 0) ;przesunięcie układu współrzędnych
Next

Do
Until GUIGetMsg() = $GUI_EVENT_CLOSE

_GDIPlus_PathDispose($hPath)
_GDIPlus_PenDispose($hPen)
_GDIPlus_PenDispose($hPen1)
_GDIPlus_GraphicsDispose($hGraphic)
_GDIPlus_Shutdown()

Obiekty brush (Pędzel)

[edytuj]

Pędzle służą do zamalowywania obszarów i wpisywania tekstów.

W AutoIt 3.3.10.2 można używać pędzli pięciu rodzajów (wcześniej tylko typu solid):

- jednolity kolor (Solid Brush)

- kreskowanie (Hatch Brush)

- gradient liniowy (Line Brush)

- gradient wzdłuż ścieżki (Path Brush)

- tekstura (Texture Brush)

Poniżej trzy funkcje działające na wszystkich rodzajach pędzli:


_GDIPlus_BrushClone

[edytuj]
#include <GDIPlus.au3>
_GDIPlus_BrushClone($hBrush)

Funkcja klonuje pędzel. Zwraca uchwyt do nowego pędzla, lub 0 gdy wystąpił błąd.

$hBrush - uchwyt do klonowanego pędzla, np. zwracany przez _GDIPlus_BrushCreateSolid

Likwidacja obiektu za pomocą _GDIPlus_BrushDispose.


_GDIPlus_BrushGetType

[edytuj]
#include <GDIPlus.au3>
_GDIPlus_BrushGetType($hBrush)

Funkcja zwraca typ pędzla, lub -1 gdy wystąpił błąd.

0 - jednolity kolor (Solid)
1 - kreskowanie
2 - tekstura
3 - gradient wzdłuż ścieżki
4 - gradient liniowy

$hBrush - uchwyt do pędzla


_GDIPlus_BrushDispose

[edytuj]
#include <GDIPlus.au3>
_GDIPlus_BrushDispose($hBrush)

Funkcja likwiduje pędzel. Zwraca TRUE gdy sukces, lub FALSE gdy wystąpił błąd.

$hBrush - uchwyt do likwidowanego pędzla, np. zwracany przez _GDIPlus_BrushCreateSolid lub _GDIPlus_BrushClone

Obiekt SolidBrush (Pędzel o jednolitym kolorze)

[edytuj]

_GDIPlus_BrushCreateSolid

[edytuj]
#include <GDIPlus.au3>
_GDIPlus_BrushCreateSolid([$iARGB = 0xFF000000])

Funkcja tworzy pędzel typu solid (malujący jednolitym kolorem). Zwraca uchwyt do pędzla, lub 0 gdy wystąpił błąd.

$iARGB - składowe koloru pędzla, po dwa bajty aarrggbb (np. 0xEEFF1055), gdzie:

aa - przezroczystość (kanał alfa) od 00 (całkowicie przezroczysty) do FF (całkowicie nieprzezroczysty)

rr, gg, bb - składowe poszczególnych kolorów RGB, wartości od 00 do FF

Wartość domyślna (0xFF000000) to całkowicie nieprzezroczysty kolor czarny.

Likwidacja obiektu za pomocą _GDIPlus_BrushDispose.


_GDIPlus_BrushSetSolidColor

[edytuj]
#include <GDIPlus.au3>
_GDIPlus_BrushSetSolidColor($hBrush, [$iARGB = 0xFF000000])

Funkcja zmienia kolor pędzla. Zwraca TRUE gdy sukces, lub FALSE gdy wystąpił błąd.

$hBrush - uchwyt do likwidowanego pędzla, np. zwracany przez _GDIPlus_BrushCreateSolid lub _GDIPlus_BrushClone

$iARGB - składowe koloru pędzla, po dwa bajty aarrggbb (np. 0xEEFF1055), gdzie:

aa - przezroczystość (kanał alfa) od 00 (całkowicie przezroczysty) do FF (całkowicie nieprzezroczysty)

rr, gg, bb - składowe poszczególnych kolorów RGB, wartości od 00 do FF

Wartość domyślna (0xFF000000) to całkowicie nieprzezroczysty kolor czarny.


_GDIPlus_BrushGetSolidColor

[edytuj]
#include <GDIPlus.au3>
_GDIPlus_BrushGetSolidColor($hBrush)

Funkcja odczytuje kolor pędzla. Zwraca kod koloru (format jak w _GDIPlus_BrushSetSolidColor), lub -1 gdy wystąpił błąd.

$hBrush - uchwyt do pędzla, np. zwracany przez _GDIPlus_BrushCreateSolid lub _GDIPlus_BrushClone


Obiekt HatchBrush (pędzel z kreskowaniem)

[edytuj]

_GDIPlus_HatchBrushCreate

[edytuj]
 #include <GDIPlus.au3>
_GDIPlus_HatchBrushCreate ( [ $iHatchStyle = 0 [, $iARGBForeground = 0xFFFFFFFF [, $iARGBBackground = 0xFFFFFFFF]]] )

Funkcja tworzy pędzel typu hatch (kreskowanie). Zwraca uchwyt do pędzla, lub 0 gdy wystąpił błąd.

$iHatchStyle - styl kreskowania (zakres wartości od 0 do 52)

$iArgbForeground - kolor wzoru w formacie AARRGGBB, domyślnie kolor czarny

$iArgbBackground - kolor tła w formacie AARRGGBB, domyślnie kolor biały

Przykład:

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

$hGUI = GUICreate("GDI+", 580, 320)
GUISetState()

_GDIPlus_Startup()
$hGraphic = _GDIPlus_GraphicsCreateFromHWND($hGUI)


$hBrush1 = _GDIPlus_HatchBrushCreate(0,0xFF00FF00, 0xFF0000FF)
_GDIPlus_GraphicsFillEllipse($hGraphic, 20, 30, 120, 250, $hBrush1)

$hBrush2 = _GDIPlus_HatchBrushCreate(3,0xFFFF0000, 0xFF00FF00)
_GDIPlus_GraphicsFillRect($hGraphic, 220, 30, 120, 250, $hBrush2)

$hBrush3 = _GDIPlus_HatchBrushCreate(52,0xFF0000FF, 0xFFFFFF00)
_GDIPlus_GraphicsFillRect($hGraphic, 420, 30, 120, 250, $hBrush3)

Do
Until GUIGetMsg() = $GUI_EVENT_CLOSE

_GDIPlus_BrushDispose($hBrush1)
_GDIPlus_BrushDispose($hBrush2)
_GDIPlus_BrushDispose($hBrush3)
_GDIPlus_GraphicsDispose($hGraphic)
_GDIPlus_Shutdown()

Obiekt LineBrush (Pędzel z gradientem liniowym kolorów)

[edytuj]

_GDIPlus_LineBrushCreate

[edytuj]
#include <GDIPlus.au3>
_GDIPlus_LineBrushCreate ( $nX1, $nY1, $nX2, $nY2, $iARGBClr1, $iARGBClr2 [, $iWrapMode = 0] )

Funkcja tworzy liniowy pędzel gradientowy. Zwraca uchwyt do pędzla, lub 0 gdy wystąpił błąd.

$nX1, $nY1 - współrzędne punktu początkowego gradientu

$nX2, $nY2 - współrzędne punktu końcowego gradientu

$iARGBClr1 - składowe początkowego koloru gradientu (alfa i RGB)

$iARGBClr2 - składowe końcowego koloru gradientu (alfa i RGB)

$iWrapMode - parametr określający tryb nakładania kolejnych płytek gradientu.

Odcinek łączący punkty 1 i 2 wyznacza kierunek gradientu, a jego długość jest szerokością płytki gradientu.

Płytka gradientu jest ograniczona dwiema izochromami prostopadłymi do kierunku gradientu, o kolorach $iARGBClr1 i $iARGBClr2.

Jeżeli obszar do zamalowania jest szerszy od płytki gradientu, to dostawiane są kolejne płytki.

Płytki mogą być obrócone lub nie w zależności od wartości parametru $iWrapMode, i tak:

0 - płytka nie obrócona

1 - płytka obrócona wokół izochromy

2 - płytka obrócona wokół kierunku gradientu

3 - płytka obrócona wokół obu osi

4 - brak płytki (obszar nie jest wypełniany gradientem)

Ponieważ dla gradientu liniowego obrót wokół kierunku gradientu nie zmienia wyglądu płytki, efekt dla parametru 0 i 2, oraz 1 i 3 są identyczne, co widać na poniższym przykładzie:

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

$hGUI = GUICreate("GDI+", 760, 320)
GUISetState()

_GDIPlus_Startup()
$hGraphic = _GDIPlus_GraphicsCreateFromHWND($hGUI)

$hBrush1 = _GDIPlus_LineBrushCreate(20, 50, 50, 100, 0xFFFF0000, 0xFF4020FF)
_GDIPlus_GraphicsFillRect($hGraphic, 20, 30, 120, 250, $hBrush1)

$hBrush2 = _GDIPlus_LineBrushCreate(220, 50, 250, 100, 0xFFFF0000, 0xFF4020FF, 1)
_GDIPlus_GraphicsFillRect($hGraphic, 220, 30, 120, 250, $hBrush2)

$hBrush3 = _GDIPlus_LineBrushCreate(420, 50, 450, 100, 0xFFFF0000, 0xFF4020FF, 2)
_GDIPlus_GraphicsFillRect($hGraphic, 420, 30, 120, 250, $hBrush3)

$hBrush3 = _GDIPlus_LineBrushCreate(620, 50, 650, 100, 0xFFFF0000, 0xFF4020FF, 3)
_GDIPlus_GraphicsFillRect($hGraphic, 620, 30, 120, 250, $hBrush3)

Do
Until GUIGetMsg() = $GUI_EVENT_CLOSE

_GDIPlus_BrushDispose($hBrush1)
_GDIPlus_BrushDispose($hBrush2)
_GDIPlus_BrushDispose($hBrush3)
_GDIPlus_GraphicsDispose($hGraphic)
_GDIPlus_Shutdown()

Przykład jak uzyskać efekt kraty przez nałożenie gradientów:

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

$hGUI = GUICreate("GDI+", 350, 350)
GUISetState()

_GDIPlus_Startup()
$hGraphic = _GDIPlus_GraphicsCreateFromHWND($hGUI)

$hBrush1 = _GDIPlus_LineBrushCreate(0, 0, 0, 50, 0xFFFF0000, 0xFF0000FF, 0)
_GDIPlus_GraphicsFillRect($hGraphic, 0, 0, 350, 350, $hBrush1)

$hBrush2 = _GDIPlus_LineBrushCreate(0, 0, 50, 0, 0x80FF0000, 0x800000FF, 0)
_GDIPlus_GraphicsFillRect($hGraphic, 0, 0, 350, 350, $hBrush2)

Do
Until GUIGetMsg() = $GUI_EVENT_CLOSE

_GDIPlus_BrushDispose($hBrush1)
_GDIPlus_BrushDispose($hBrush2)

_GDIPlus_GraphicsDispose($hGraphic)
_GDIPlus_Shutdown()

_GDIPlus_LineBrushCreateFromRect

[edytuj]
#include <GDIPlus.au3>
_GDIPlus_LineBrushCreateFromRect ( $tRectF, $iARGBClr1, $iARGBClr2 [, $iGradientMode = 0 [, $iWrapMode = 0]] )

Funkcja tworzy liniowy pędzel gradientowy w oparciu o dane zawarte w strukturze $tagGDIPRECTF. Zwraca uchwyt do pędzla, lub 0 gdy wystąpił błąd.

$tRectF - struktura z położeniem i wielkością prostokąta definiującego gradient

$iARGBClr1 - składowe początkowego koloru gradientu (alfa i RGB)

$iARGBClr2 - składowe końcowego koloru gradientu (alfa i RGB)

$iGradientMode - parametr określający kierunek gradientu:

0 - poziomy od lewej do prawej (izochromy są pionowe)
1 - pionowy od góry do dołu (izochromy są poziome)
2 - skośny od lewego-górnego do prawego-dolnego narożnika
3 - skośny od prawego-górnego do lewego-dolnego narożnika

Dla 0 i 1 izochromy pokrywają się z bokami prostokąta definiującego, dla 2 i 3 przechodzą przez przeciwległe wierzchołki prostokąta i są równoległe do jego przekątnej.

$iWrapMode - parametr określający tryb nakładania kolejnych płytek gradientu (jak dla _GDIPlus_LineBrushCreate).

W poniższym przykładzie pokazano położenie izochrom w stosunku do prostokąta definiującego:

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

$hGUI = GUICreate("GDI+", 400, 300)
GUISetState(@SW_SHOW)

_GDIPlus_Startup()
$hGraphic = _GDIPlus_GraphicsCreateFromHWND($hGUI)

Local $x=100, $y=50, $w=100, $h=60

$tRectF = _GDIPlus_RectFCreate($x, $y, $w, $h)
$hBrush = _GDIPlus_LineBrushCreateFromRect($tRectF, 0xFF0008000, 0xFFFFFFFF, 3, 0)

_GDIPlus_GraphicsFillRect($hGraphic, 0, 0, 400, 300, $hBrush)
_GDIPlus_GraphicsDrawRect($hGraphic, $x, $y, $w, $h)

Do
Until GUIGetMsg() = $GUI_EVENT_CLOSE

_GDIPlus_BrushDispose($hBrush)
_GDIPlus_GraphicsDispose($hGraphic)
_GDIPlus_Shutdown()


_GDIPlus_LineBrushCreateFromRectWithAngle

[edytuj]
#include <GDIPlus.au3>
_GDIPlus_LineBrushCreateFromRectWithAngle ( $tRectF, $iARGBClr1, $iARGBClr2, $fAngle [, $bIsAngleScalable = True [, $iWrapMode = 0]] )

Funkcja tworzy liniowy pędzel gradientowy w oparciu o kąt i dane zawarte w strukturze $tagGDIPRECTF. Zwraca uchwyt do pędzla, lub 0 gdy wystąpił błąd.

$tRectF - struktura z położeniem i wielkością prostokąta definiującego gradient

$iARGBClr1 - składowe początkowego koloru gradientu (alfa i RGB)

$iARGBClr2 - składowe końcowego koloru gradientu (alfa i RGB)

$fAngle - kąt kierunku gradientu, w stopniach

$bIsAngleScalable - True - kąt jest skalowany względem wymiarów prostokąta definiującego wg wzoru β = atan( tan( $fAngle ) * szerokość / wysokość ), False - kąt nie jest skalowany

$iWrapMode - parametr określający tryb nakładania kolejnych płytek gradientu (jak dla _GDIPlus_LineBrushCreate).

Przykład (ze skalowaniem kąta):

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

$hGUI = GUICreate("GDI+", 400, 300)
GUISetState(@SW_SHOW)

_GDIPlus_Startup()
$hGraphic = _GDIPlus_GraphicsCreateFromHWND($hGUI)

Local $x=100, $y=50, $w=160, $h=60

$tRectF = _GDIPlus_RectFCreate($x, $y, $w, $h)
$hBrush = _GDIPlus_LineBrushCreateFromRectWithAngle($tRectF, 0xFF0008000, 0xFFFFFFFF, 45)

_GDIPlus_GraphicsFillRect($hGraphic, 0, 0, 400, 300, $hBrush)
_GDIPlus_GraphicsDrawRect($hGraphic, $x, $y, $w, $h)

Do
Until GUIGetMsg() = $GUI_EVENT_CLOSE

_GDIPlus_BrushDispose($hBrush)
_GDIPlus_GraphicsDispose($hGraphic)
_GDIPlus_Shutdown()

_GDIPlus_LineBrushGetColors

[edytuj]
#include <GDIPlus.au3>
_GDIPlus_LineBrushGetColors ( $hLineGradientBrush )

Funkcja zwraca w postaci dwuelementowej tablicy kod koloru początkowego i końcowego gradientu liniowego. Jeżeli wystąpił błąd makro @error przyjmuje wartość różną od zera.

[0] - kod koloru początkowego w formacie ARGB
[1] - kod koloru końcowego w formacie ARGB

$hLineGradientBrush - uchwyt pędzla z gradientem liniowym

Przykład:

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

$hGUI = GUICreate("GDI+", 400, 400)
GUISetState(@SW_SHOW)

_GDIPlus_Startup()
$hGraphics = _GDIPlus_GraphicsCreateFromHWND($hGUI)
$hBrush = _GDIPlus_LineBrushCreate(0, 0, 400, 0, Random(0xFF000000, 0xFFFFFFFF, 1), Random(0xFF000000, 0xFFFFFFFF, 1))

_GDIPlus_GraphicsFillRect($hGraphics, 0, 0, 400, 400, $hBrush)

$sColStart = Hex(_GDIPlus_LineBrushGetColors($hBrush)[0], 8)
$sColEnd   = Hex(_GDIPlus_LineBrushGetColors($hBrush)[1], 8)
MsgBox(0, "", "Kolor początkowy: " & $sColStart & @LF & "Kolor końcowy:      " & $sColEnd)

Do
Until GUIGetMsg() = $GUI_EVENT_CLOSE

_GDIPlus_BrushDispose($hBrush)
_GDIPlus_GraphicsDispose($hGraphics)
_GDIPlus_Shutdown()


_GDIPlus_LineBrushGetRect

[edytuj]
#include <GDIPlus.au3>
_GDIPlus_LineBrushGetRect ( $hLineGradientBrush )

Funkcja zwraca w postaci 4-elementowej tablicy, dane prostokąta definiującego gradient liniowy. Jeżeli wystąpił błąd makro @error przyjmuje wartość różną od zera.

[0] - współrzędna X lewego górnego narożnika prostokąta
[1] - współrzędna Y lewego górnego narożnika prostokąta
[2] - szerokość prostokąta
[3] - wysokość prostokąta

$hLineGradientBrush - uchwyt pędzla z gradientem liniowym

Przykład:

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

$hGUI = GUICreate("GDI+", 400, 300)
GUISetState(@SW_SHOW)

_GDIPlus_Startup()
$hGraphic = _GDIPlus_GraphicsCreateFromHWND($hGUI)

Local $x=Random(10, 100, 1), $y=Random(30, 60, 1), $x1=Random(5, 100, 1), $y1=Random(60, 100, 1)

$hBrush = _GDIPlus_LineBrushCreate($x, $y, $x1, $y1, 0xFF0008000, 0xFFFFFFFF, 2)

_GDIPlus_GraphicsFillRect($hGraphic, 0, 0, 400, 300, $hBrush)

$aRect = _GDIPlus_LineBrushGetRect($hBrush)
_GDIPlus_GraphicsDrawRect($hGraphic, $aRect[0], $aRect[1], $aRect[2], $aRect[3])

Do
Until GUIGetMsg() = $GUI_EVENT_CLOSE

_GDIPlus_BrushDispose($hBrush)
_GDIPlus_GraphicsDispose($hGraphic)
_GDIPlus_Shutdown()


_GDIPlus_LineBrushMultiplyTransform

[edytuj]
#include <GDIPlus.au3>
_GDIPlus_LineBrushMultiplyTransform ( $hLineGradientBrush, $hMatrix [, $iOrder = 0] )

Funkcja aktualizuje macierz transformacji pędzla za pomocą metod obiektu matrix. Zwraca True gdy sukces, lub False gdy wystąpił błąd.

Transformacje są definiowane za pomocą funkcji obiektu matrix i powodują przemieszczanie, obroty i skalowanie lokalnego układu współrzędnych związanego z pędzlem.

Dane pędzla i transformacji są zorganizowane w postaci macierzy. Transformacja polega na wymnożeniu macierzy danych przez macierz transformacji.

$hLineGradientBrush - uchwyt pędzla z gradientem liniowym

$hMatrix - uchwyt do obiektu matrix

$iOrder - parametr określa kolejność mnożenia macierzy. I tak 0 -> MD * MP, 1 -> MP * MD. Ponieważ mnożenie macierzy nie jest przemienne, najczęściej efekt działania funkcji dla obu wartości parametru będzie różny.

Przykład:

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

$hGUI = GUICreate("GDI+", 400, 400)
GUISetState()

_GDIPlus_Startup()
$hGraphic = _GDIPlus_GraphicsCreateFromHWND($hGUI)
_GDIPlus_GraphicsClear($hGraphic, 0xFFFFFFFF)

$hBrush = _GDIPlus_LineBrushCreate(0, 0, 400, 400, 0xFFFF0000, 0xFF000000, 1)

$hMatrix = _GDIPlus_MatrixCreate()
_GDIPlus_MatrixTranslate($hMatrix, 15, 15)
_GDIPlus_MatrixRotate($hMatrix, 1)

For $i = 1 To 720
   _GDIPlus_GraphicsFillRect($hGraphic, 0, 0, 400, 400, $hBrush)
   _GDIPlus_LineBrushMultiplyTransform($hBrush, $hMatrix, 1)
   Sleep(10)
Next

Do
Until GUIGetMsg() = $GUI_EVENT_CLOSE

_GDIPlus_MatrixDispose($hMatrix)
_GDIPlus_BrushDispose($hBrush)
_GDIPlus_GraphicsDispose($hGraphic)
_GDIPlus_Shutdown()


_GDIPlus_LineBrushResetTransform

[edytuj]
#include <GDIPlus.au3>
_GDIPlus_LineBrushResetTransform ( $hLineGradientBrush )

Funkcja resetuje transformacje geometryczne wykonane ma pędzlu z gradientem liniowym. Zwraca True gdy sukces, lub False gdy wystąpił błąd.

Resetowane są przekształcenia związane z przesunięciem i obrotem, ale nie z kolorem i wielkością i położeniem prostokąta definiującego.

Należy zwrócić uwagę, że pierwsza transformacja związana z obrotem dokonuje się już na etapie definiowania pędzla (jawnie dla _GDIPlus_LineBrushCreateFromRectWithAngle i niejawnie dla _GDIPlus_LineBrushCreate), więc po resecie kąt kierunku gradientu będzie wynosił 0.

$hLineGradientBrush - uchwyt pędzla z gradientem liniowym

Przykład:

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

$hGUI = GUICreate("GDI+", 400, 400)
GUISetState()

_GDIPlus_Startup()
$hGraphic = _GDIPlus_GraphicsCreateFromHWND($hGUI)

$hBrush = _GDIPlus_LineBrushCreate(0, 0, 40, 40, 0xFF00FF00, 0xFF0000FF, 3)
_GDIPlus_GraphicsFillRect($hGraphic, 0, 0, 400, 400, $hBrush)
Sleep(3000)

$hMatrix = _GDIPlus_MatrixCreate()
_GDIPlus_MatrixRotate($hMatrix, 90)
_GDIPlus_LineBrushMultiplyTransform($hBrush, $hMatrix, 1)
_GDIPlus_GraphicsFillRect($hGraphic, 0, 0, 400, 400, $hBrush)
Sleep(3000)

_GDIPlus_LineBrushResetTransform($hBrush) ;zresetowanie transformacji
_GDIPlus_GraphicsFillRect($hGraphic, 0, 0, 400, 400, $hBrush)

Do
Until GUIGetMsg() = $GUI_EVENT_CLOSE

_GDIPlus_BrushDispose($hBrush)
_GDIPlus_GraphicsDispose($hGraphic)
_GDIPlus_Shutdown()


_GDIPlus_LineBrushSetBlend

[edytuj]
#include <GDIPlus.au3>
_GDIPlus_LineBrushSetBlend ( $hLineGradientBrush, $aBlends )

Funkcja ustawia współczynniki i pozycje mieszania kolorów celem uzyskania niestandardowego gradientu liniowego pędzla. Zwraca True gdy sukces, lub False gdy wystąpił błąd.

$hLineGradientBrush - uchwyt pędzla z gradientem liniowym

$aBlends - dwuwymiarowa tablica zawierająca współczynniki i pozycje mieszania

[0][0] - liczba współczynników mieszania i stanowisk mieszania musi wynosić co najmniej 2
[1][0] - współczynnik 1
[1][1] - pozycja 1
[2][0] - współczynnik 2
[2][1] - pozycja 2
 ...
[n][0] - współczynnik n
[n][1] - pozycja n

Przykład:

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

_GDIPlus_Startup()
$hGUI = GUICreate("GDI+", 400, 400)
GUISetState()

$hGraphics = _GDIPlus_GraphicsCreateFromHWND($hGUI)
$hBrush = _GDIPlus_LineBrushCreate(0, 0, 200, 300, 0xFFFFFF00, 0xFF4020FF, 1)

Local $aBlends[5][2]
$aBlends[0][0] = 4
$aBlends[1][0] = 0
$aBlends[1][1] = 0
$aBlends[2][0] = 1
$aBlends[2][1] = 0.1
$aBlends[3][0] = 0
$aBlends[3][1] = 0.5
$aBlends[4][0] = 1
$aBlends[4][1] = 1

_GDIPlus_GraphicsFillRect($hGraphics, 0, 0, 400, 400, $hBrush)
Sleep(3000)

_GDIPlus_LineBrushSetBlend($hBrush, $aBlends)
_GDIPlus_GraphicsFillRect($hGraphics, 0, 0, 400, 400, $hBrush)

Do
Until GUIGetMsg() = $GUI_EVENT_CLOSE

_GDIPlus_BrushDispose($hBrush)
_GDIPlus_GraphicsDispose($hGraphics)
_GDIPlus_Shutdown()


_GDIPlus_LineBrushSetColors

[edytuj]
#include <GDIPlus.au3>
_GDIPlus_LineBrushSetColors ( $hLineGradientBrush, $iARGBStart, $iARGBEnd )

Funkcja ustawia początkowy i końcowy kolor gradientu liniowego pędzla. Zwraca True gdy sukces, lub False gdy wystąpił błąd.

$hLineGradientBrush - uchwyt pędzla z gradientem liniowym

$iARGBStart - składowe początkowego koloru gradientu (alfa i RGB)

$iARGBEnd - składowe końcowego koloru gradientu (alfa i RGB)

Przykład:

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

$hGUI = GUICreate("GDI+", 400, 400)
GUISetState()

_GDIPlus_Startup()
$hGraphic = _GDIPlus_GraphicsCreateFromHWND($hGUI)

$tRectF = _GDIPlus_RectFCreate(100, 100, 100, 100)

;tworzenie pędzla
$hBrush = _GDIPlus_LineBrushCreateFromRect($tRectF, RandomColor(), RandomColor(), 2, 1)

Do
   ;zmiana kolorów pędzla
   _GDIPlus_LineBrushSetColors ($hBrush, RandomColor(), RandomColor())
   
   ;zamalowanie pędzlem prostokątnego obszaru okna
   _GDIPlus_GraphicsFillRect($hGraphic, 0, 0, 400, 400, $hBrush)
   
   Sleep(150)
Until GUIGetMsg() = $GUI_EVENT_CLOSE

_GDIPlus_BrushDispose($hBrush)
_GDIPlus_GraphicsDispose($hGraphic)
_GDIPlus_Shutdown()

;generowanie losowego kodu koloru RGB
Func RandomColor()
   Return Random(0xFF000000, 0xFFFFFFFF, 1)
EndFunc


_GDIPlus_LineBrushSetGammaCorrection

[edytuj]
#include <GDIPlus.au3>
_GDIPlus_LineBrushSetGammaCorrection ( $hLineGradientBrush [, $fUseGammaCorrection = True] )

Funkcja włącza/wyłącza korekcję gamma kolorów gradientu. Zwraca True gdy sukces, lub False gdy wystąpił błąd.

$hLineGradientBrush - uchwyt pędzla z gradientem liniowym

$fUseGammaCorrection - gdy True (domyślnie) korekta jest włączona, dla False korekta wyłączona

Przykład:

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

$hGUI = GUICreate("GDI+", 400, 400)
GUISetState()

_GDIPlus_Startup()
$hGraphic = _GDIPlus_GraphicsCreateFromHWND($hGUI)

$tRectF = _GDIPlus_RectFCreate(100, 100, 100, 100)

;tworzenie pędzla
$hBrush = _GDIPlus_LineBrushCreateFromRect($tRectF, 0xFFFF0000, 0xFF0000FF, 2, 1)

;zamalowanie pędzlem prostokątnego obszaru okna
_GDIPlus_GraphicsFillRect($hGraphic, 0, 0, 400, 400, $hBrush)

Sleep(3000)

;włączeni korekty gamma
_GDIPlus_LineBrushSetGammaCorrection ($hBrush, True)
_GDIPlus_GraphicsFillRect($hGraphic, 0, 0, 400, 400, $hBrush)

Sleep(3000)

;wyłączenie korekty gamma
_GDIPlus_LineBrushSetGammaCorrection ($hBrush, False)
_GDIPlus_GraphicsFillRect($hGraphic, 0, 0, 400, 400, $hBrush)

Do
Until GUIGetMsg() = $GUI_EVENT_CLOSE

_GDIPlus_BrushDispose($hBrush)
_GDIPlus_GraphicsDispose($hGraphic)
_GDIPlus_Shutdown()


_GDIPlus_LineBrushSetLinearBlend

[edytuj]
#include <GDIPlus.au3>
_GDIPlus_LineBrushSetLinearBlend ( $hLineGradientBrush, $fFocus [, $fScale = 1] )

Funkcja ustawia pozycję i intensywność mieszania kolorów w gradiencie. Zwraca True gdy sukces, lub False gdy wystąpił błąd.

$hLineGradientBrush - uchwyt pędzla z gradientem liniowym

$fFocus - określa w którym miejscu długości gradientu znajduje się barwa końcowa (zakres od 0 do 1, 0 - na początku, 1 - na końcu)

$fScale - określa intensywność barwy końcowej w gradiencie (zakres od 0 do 1, 0 - brak koloru, 1 - 100%)

Przykład:

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

$hGUI = GUICreate("GDI+", 400, 400)
GUISetState()

_GDIPlus_Startup()
$hGraphic = _GDIPlus_GraphicsCreateFromHWND($hGUI)

$hBrush = _GDIPlus_LineBrushCreate(0, 0, 400, 400, 0xFF0000A0, 0xFFFFFF00, 1)

;zmiana położenia koloru końcowego
For $i = 0 To 1 Step 0.1
   _GDIPlus_LineBrushSetLinearBlend($hBrush, $i)
   _GDIPlus_GraphicsFillRect($hGraphic, 0, 0, 400, 400, $hBrush)
   Sleep(150)
Next

;zmiana intensywności koloru końcowego
For $i = 1 To 0 Step -0.05
   _GDIPlus_LineBrushSetLinearBlend($hBrush, 1, $i)
   _GDIPlus_GraphicsFillRect($hGraphic, 0, 0, 400, 400, $hBrush)
   Sleep(100)
Next

Do
Until GUIGetMsg() = $GUI_EVENT_CLOSE

_GDIPlus_BrushDispose($hBrush)
_GDIPlus_GraphicsDispose($hGraphic)
_GDIPlus_Shutdown()

_GDIPlus_LineBrushSetPresetBlend

[edytuj]
#include <GDIPlus.au3>
_GDIPlus_LineBrushSetPresetBlend ( $hLineGradientBrush, $aInterpolations )

Funkcja ustawia położenie i barwę mieszania kilku kolorów (gradient wielokolorowy). Zwraca True gdy sukces, lub False gdy wystąpił błąd.

$hLineGradientBrush - uchwyt pędzla z gradientem liniowym

$aInterpolations - 2-wymiarowa tablica zawierająca dane mieszanych kolorów

[0][0] - ilość mieszanych kolorów
[1][0] - kolor 1
[1][1] - położenie 1
[2][0] - kolor 2
[2][1] - położenie 2
 ...
[n][0] - kolor n
[n][1] - położenie n

Przykład (symulacja spektrum światła białego):

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

$hGUI = GUICreate("Spektrum", 600, 300)
GUISetBkColor(0, $hGUI)
GUISetState()

_GDIPlus_Startup()
$hGraphics = _GDIPlus_GraphicsCreateFromHWND($hGUI)

$tRectF = _GDIPlus_RectFCreate(10, 50, 580, 180)

;tworzenie pędzla
$hBrush = _GDIPlus_LineBrushCreateFromRect($tRectF, 0, 0, 0, 1)

;tablica z danymi gradientu wielokolorowego
Dim $aInterpolations[6][2]
$aInterpolations[0][0] = 5
$aInterpolations[1][0] = 0xFFD00000 ;Czerwony
$aInterpolations[1][1] = 0
$aInterpolations[2][0] = 0xFFFFFF00 ;Żółty
$aInterpolations[2][1] = 0.25
$aInterpolations[3][0] = 0xFF00FF00 ;Zielony
$aInterpolations[3][1] = 0.5
$aInterpolations[4][0] = 0xFF0080FF ;Niebieski
$aInterpolations[4][1] = 0.75
$aInterpolations[5][0] = 0xFF7000A0 ;Fioletowy
$aInterpolations[5][1] = 1

_GDIPlus_LineBrushSetPresetBlend($hBrush, $aInterpolations)

_GDIPlus_GraphicsFillRect($hGraphics, 10, 50, 580, 180, $hBrush)

Do
Until GUIGetMsg() = $GUI_EVENT_CLOSE

_GDIPlus_BrushDispose($hBrush)
_GDIPlus_GraphicsDispose($hGraphics)
_GDIPlus_Shutdown()
GUIDelete($hGUI)


_GDIPlus_LineBrushSetSigmaBlend

[edytuj]
#include <GDIPlus.au3>
_GDIPlus_LineBrushSetSigmaBlend ( $hLineGradientBrush, $fFocus [, $fScale = 1] )

Funkcja ustawienie mieszanie kolorów gradientu wg kształtu krzywej dzwonowej. Zwraca True gdy sukces, lub False gdy wystąpił błąd.

$hLineGradientBrush - uchwyt pędzla z gradientem liniowym

$fFocus - określa w którym miejscu długości gradientu znajduje się barwa końcowa (zakres od 0 do 1, 0 - na początku, 1 - na końcu)

$fScale - określa intensywność barwy końcowej w gradiencie (zakres od 0 do 1, 0 - brak koloru, 1 - 100%)

Przykład:

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

$hGUI = GUICreate("GDI+", 600, 300)
GUISetBkColor(0, $hGUI) ;tło GUI
GUISetState()

_GDIPlus_Startup()
$hGraphics = _GDIPlus_GraphicsCreateFromHWND($hGUI)

$hBrush = _GDIPlus_LineBrushCreate(0, 0, 0, 280, 0xFFFFFF00, 0xFF0000FF, 1)

_GDIPlus_GraphicsFillRect($hGraphics, 10, 10, 280, 280, $hBrush)

;mieszanie w połowie długości gradientu, intensywność barwy końcowej 80%
_GDIPlus_LineBrushSetSigmaBlend($hBrush, 0.5, 0.8)
_GDIPlus_GraphicsFillRect($hGraphics, 310, 10, 280, 280, $hBrush)

_GDIPlus_GraphicsDrawString($hGraphics, "bez sigma blend", 14, 14)
_GDIPlus_GraphicsDrawString($hGraphics, "z sigma blend", 314, 14)

Do
Until GUIGetMsg() = $GUI_EVENT_CLOSE

_GDIPlus_BrushDispose($hBrush)
_GDIPlus_GraphicsDispose($hGraphics)
_GDIPlus_Shutdown()
GUIDelete($hGUI)


_GDIPlus_LineBrushSetTransform

[edytuj]
#include <GDIPlus.au3>
_GDIPlus_LineBrushSetTransform ( $hLineGradientBrush, $hMatrix )

Funkcja ustawia macierz przekształcenia gradientu liniowego pędzla, co jest równoważne z transformacją do nowego układu współrzędnych. Zwraca True gdy sukces, lub False gdy wystąpił błąd.

$hLineGradientBrush - uchwyt pędzla z gradientem liniowym

$hMatrix - wskaźnik do macierzy transformacji

Przykład:

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

$hGUI = GUICreate("GDI+", 400, 400)
GUISetState()

_GDIPlus_Startup()
$hGraphic = _GDIPlus_GraphicsCreateFromHWND($hGUI)
_GDIPlus_GraphicsClear($hGraphic, 0xFFFFFFFF)

$hBrush = _GDIPlus_LineBrushCreate(0, 0, 400, 400, 0xFFDD0000, 0xFFFFFFFF, 1)

$hMatrix = _GDIPlus_MatrixCreate()

For $i = 0 To 360
   _GDIPlus_MatrixRotate($hMatrix, 2) ;obrót układu współrzędnych o 2 stopnie
   _GDIPlus_LineBrushSetTransform($hBrush, $hMatrix)
   _GDIPlus_GraphicsFillRect($hGraphic, 0, 0, 400, 400, $hBrush)
   Sleep(50)
Next

Do
Until GUIGetMsg() = $GUI_EVENT_CLOSE

_GDIPlus_MatrixDispose($hMatrix)
_GDIPlus_BrushDispose($hBrush)
_GDIPlus_GraphicsDispose($hGraphic)
_GDIPlus_Shutdown()


Obiekt PathBrush (Pędzel z gradientem kolorów po ścieżce)

[edytuj]

_GDIPlus_PathBrushCreate

[edytuj]
#include <GDIPlus.au3>
_GDIPlus_PathBrushCreate ( $aPoints [, $iWrapMode = 0] )

Funkcja tworzy pędzel z gradientem kolorów po ścieżce. Zwraca uchwyt do pędzla, lub 0 gdy wystąpił błąd.

$aPoints - 2-wymiarowa tablica z współrzędnymi punktów węzłowych ścieżki

[0][0] - ilość punktów
[1][0] - punkt 1 współrzędna X
[1][1] - punkt 1 współrzędna Y
[2][0] - punkt 2 współrzędna X
[2][1] - punkt 2 współrzędna Y
 ...
[n][0] - punkt n współrzędna X
[n][1] - punkt n współrzędna Y

$iWrapMode - parametr określający tryb nakładania kolejnych płytek gradientu.

Odcinek łączący punkty węzłowe tworzą figurę, której krawędzie wyznaczają kierunki gradientów.

Można zdefiniować kolory w każdym punkcie węzłowym, oraz w punkcie środkowym figury (oddzielnymi funkcjami).

Prostokąt opisany na tej figurze tworzy płytkę gradientu.

Jeżeli obszar do zamalowania jest większy od płytki gradientu, to dostawiane są kolejne płytki.

Płytki mogą być obrócone lub nie w zależności od wartości parametru $iWrapMode, i tak:

0 - płytka nie obrócona

1 - płytka obrócona wokół osi pionowej

2 - płytka obrócona wokół osi poziomej

3 - płytka obrócona wokół obu osi

4 - tylko pojedyncza płytka

Przykład:

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

$hGUI = GUICreate("GDI+", 600, 400)
GUISetState()

_GDIPlus_Startup()
$hGraphics = _GDIPlus_GraphicsCreateFromHWND($hGUI)

Local $aPoints[5][2] = [[4]]
$aPoints[1][0] = 0
$aPoints[1][1] = 0
$aPoints[2][0] = 0
$aPoints[2][1] = 100
$aPoints[3][0] = 100
$aPoints[3][1] = 100
$aPoints[4][0] = 100
$aPoints[4][1] = 0
$hBrush = _GDIPlus_PathBrushCreate($aPoints, 3)

Local $aColors[5] = [4]
$aColors[1] = 0xFFFF0000
$aColors[2] = 0xFF00FF00
$aColors[3] = 0xFF0000FF
$aColors[4] = 0xFFFFFF00
_GDIPlus_PathBrushSetSurroundColorsWithCount($hBrush, $aColors)

_GDIPlus_GraphicsFillRect($hGraphics, 0, 0, 600, 400, $hBrush)

Do
Until GUIGetMsg() = $GUI_EVENT_CLOSE

_GDIPlus_BrushDispose($hBrush)
_GDIPlus_GraphicsDispose($hGraphics)
_GDIPlus_Shutdown()


_GDIPlus_PathBrushCreateFromPath

[edytuj]
 #include <GDIPlus.au3>
_GDIPlus_PathBrushCreateFromPath ( $hPath )

Funkcja tworzy pędzel z gradientem po ścieżce wg wcześniej zdefiniowanej ścieżki (patrz podrozdział "Ścieżki (GraphicsPath)"). Zwraca uchwyt do pędzla, lub 0 gdy wystąpił błąd.

$hPath - uchwyt do ścieżki

Przykład:

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

$hGUI = GUICreate("GDI+", 200, 180)
GUISetState()

_GDIPlus_Startup()
$hGraphics = _GDIPlus_GraphicsCreateFromHWND($hGUI)
_GDIPlus_GraphicsClear($hGraphics, 0xFF000000)

;tworzenie i definiowanie ścieżki
$hPath = _GDIPlus_PathCreate()
_GDIPlus_PathAddEllipse($hPath, 10, 10, 180, 160)

$hBrush = _GDIPlus_PathBrushCreateFromPath($hPath)
_GDIPlus_PathBrushSetSurroundColor($hBrush, 0xFF0000FF)

_GDIPlus_GraphicsFillRect($hGraphics, 10, 10, 180, 160, $hBrush)

Do
Until GUIGetMsg() = $GUI_EVENT_CLOSE

_GDIPlus_BrushDispose($hBrush)
_GDIPlus_PathDispose($hPath)
_GDIPlus_GraphicsDispose($hGraphics)
_GDIPlus_Shutdown()


_GDIPlus_PathBrushGetCenterPoint

[edytuj]
#include <GDIPlus.au3>
_GDIPlus_PathBrushGetCenterPoint ( $hPathGradientBrush )

Funkcja odczytuje współrzędne punktu środkowego pędzla z gradientem po ścieżce. Zwraca jednowymiarową tablicę ze współrzędnymi. Jeżeli wystąpił błąd makro @error przyjmuje wartość różną od zera.

[0] - współrzędna X
[1] - współrzędna Y

$hPathGradientBrush - uchwyt pędzla z gradientem po ścieżce


_GDIPlus_PathBrushSetCenterPoint

[edytuj]
#include <GDIPlus.au3>
_GDIPlus_PathBrushSetCenterPoint ( $hPathGradientBrush, $nX, $nY )

Funkcja definiuje punkt środkowy pędzla z gradientem po ścieżce. Zwraca True gdy sukces, lub False gdy wystąpił błąd.

$hPathGradientBrush - uchwyt pędzla z gradientem po ścieżce

$nX, $nY - współrzędne punktu środkowego

Przykład:

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

$hGUI = GUICreate("GDI+", 200, 180)
GUISetState()

_GDIPlus_Startup()
$hGraphics = _GDIPlus_GraphicsCreateFromHWND($hGUI)
_GDIPlus_GraphicsClear($hGraphics, 0xFF000000)

$hPath = _GDIPlus_PathCreate()
_GDIPlus_PathAddEllipse($hPath, 10, 10, 180, 160)

$hBrush = _GDIPlus_PathBrushCreateFromPath($hPath)
_GDIPlus_PathBrushSetSurroundColor($hBrush, 0xFF0000FF)
_GDIPlus_GraphicsFillRect($hGraphics, 10, 10, 180, 160, $hBrush)

Sleep(2000)
;odczyt współrzędnych punktu środkowego
$aTab = _GDIPlus_PathBrushGetCenterPoint ($hBrush)

For $i = 1 To 20 Step 0.1
   $x = $aTab[0] + 40*Sin($i)
   $y = $aTab[1] + 40*Cos($i)
   _GDIPlus_PathBrushSetCenterPoint ($hBrush, $X, $Y) ;ustawienie współrzędnych punktu środkowego
   _GDIPlus_GraphicsFillRect($hGraphics, 10, 10, 180, 160, $hBrush)
   Sleep(50)
Next

Do
Until GUIGetMsg() = $GUI_EVENT_CLOSE

_GDIPlus_BrushDispose($hBrush)
_GDIPlus_PathDispose($hPath)
_GDIPlus_GraphicsDispose($hGraphics)
_GDIPlus_Shutdown()


_GDIPlus_PathBrushGetFocusScales

[edytuj]
#include <GDIPlus.au3>
_GDIPlus_PathBrushGetFocusScales ( $hPathGradientBrush )

Funkcja odczytuje współczynniki skupienia gradientu pędzla z gradientem po ścieżce. Zwraca jednowymiarową tablicę ze współczynnikami. Jeżeli wystąpił błąd makro @error przyjmuje wartość różną od zera.

[0] - współczynnik w kierunku osi X
[1] - współczynnik w kierunku osi Y


_GDIPlus_PathBrushSetFocusScales

[edytuj]
#include <GDIPlus.au3>
_GDIPlus_PathBrushSetFocusScales ( $hPathGradientBrush, $fScaleX, $fScaleY )

Funkcja ustawia współczynniki skupienia gradientu pędzla z gradientem po ścieżce. Jeżeli wystąpił błąd makro @error przyjmuje wartość różną od zera.

$hPathGradientBrush - uchwyt pędzla z gradientem po ścieżce

$fScaleX, $fScaleY - skupienie gradientu wzdłuż osi X i Y. Zakres od 0 do 1, 0 - cała długość gradientu (wartość wyjściowa), 1 - na początku gradientu (będzie tylko kolor końcowy).

Przykład:

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

$hGUI = GUICreate("GDI+", 200, 180, -1, 50)
GUISetState()

_GDIPlus_Startup()
$hGraphics = _GDIPlus_GraphicsCreateFromHWND($hGUI)
_GDIPlus_GraphicsClear($hGraphics, 0xFF000000)

;tworzenie i definiowanie ścieżki
$hPath = _GDIPlus_PathCreate()
_GDIPlus_PathAddEllipse($hPath, 10, 10, 180, 160)

$hBrush = _GDIPlus_PathBrushCreateFromPath($hPath) ;tworzenie pędzla na podstawie ścieżki
_GDIPlus_PathBrushSetFocusScales($hBrush, 0.2, 0.9) ;ustalenie skali skupienia gradientu
_GDIPlus_PathBrushSetSurroundColor($hBrush, 0xFF0000FF) ;ustalenie koloru wyjściowego gradientu

_GDIPlus_GraphicsFillPath($hGraphics, $hPath, $hBrush) ;zamalowanie ścieżki

$aValue = _GDIPlus_PathBrushGetFocusScales($hBrush) ;odczyt skali gradientu
MsgBox(0, "", "Skala X: " & $aValue[0] & @CRLF & "Skala Y: " & $aValue[1])

;zwolnienie zasobów
_GDIPlus_BrushDispose($hBrush)
_GDIPlus_PathDispose($hPath)
_GDIPlus_GraphicsDispose($hGraphics)
_GDIPlus_Shutdown()


_GDIPlus_PathBrushGetPointCount

[edytuj]
#include <GDIPlus.au3>
_GDIPlus_PathBrushGetPointCount ( $hPathGradientBrush )

Funkcja zwraca liczbę punktów w tablicy punktów, które wyznaczają ścieżkę granicy pędzla. Jeżeli wystąpił błąd makro @error przyjmuje wartość różną od zera.

$hPathGradientBrush - uchwyt pędzla z gradientem po ścieżce

Przykład:

#include <GDIPlus.au3>

$hGUI = GUICreate("GDI+", 200, 180, -1, 50)
GUISetState()

_GDIPlus_Startup()
$hGraphics = _GDIPlus_GraphicsCreateFromHWND($hGUI)
_GDIPlus_GraphicsClear($hGraphics, 0xFF000000)

$hPath = _GDIPlus_PathCreate()
_GDIPlus_PathAddEllipse($hPath, 10, 10, 180, 160)

$hBrush = _GDIPlus_PathBrushCreateFromPath($hPath)
_GDIPlus_PathBrushSetCenterColor($hBrush, 0xFFFFFF00)
_GDIPlus_PathBrushSetCenterPoint($hBrush, 90, 80)
_GDIPlus_PathBrushSetSurroundColor($hBrush, 0xFF303000)

_GDIPlus_PathBrushSetGammaCorrection($hBrush, True)

_GDIPlus_GraphicsFillRect($hGraphics, 10, 10, 180, 160, $hBrush)

$iPoints = _GDIPlus_PathBrushGetPointCount($hBrush)
MsgBox(0, "", "Liczba pkt w tablicy, która określa ścieżkę granicy pędzla: " & $iPoints)


_GDIPlus_BrushDispose($hBrush)
_GDIPlus_PathDispose($hPath)
_GDIPlus_GraphicsDispose($hGraphics)
_GDIPlus_Shutdown()


_GDIPlus_PathBrushGetRect

[edytuj]
#include <GDIPlus.au3>
_GDIPlus_PathBrushGetRect ( $hPathGradientBrush )

Funkcja zwraca położenie i wielkość prostokąta opisanego na ścieżce granicy gradientu. Jeżeli wystąpił błąd makro @error przyjmuje wartość różną od zera.

$hPathGradientBrush - uchwyt pędzla z gradientem po ścieżce

UWAGA: Uzyskany prostokąt stanowi obszar pojedynczej płytki gradientu.

Przykład:

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

$hGUI = GUICreate("GDI+", 600, 400)
GUISetState()

_GDIPlus_Startup()
$hGraphics = _GDIPlus_GraphicsCreateFromHWND($hGUI)

Local $aPoints[5][2] = [[3]]
$aPoints[1][0] = 300
$aPoints[1][1] = 50
$aPoints[2][0] = 450
$aPoints[2][1] = 350
$aPoints[3][0] = 150
$aPoints[3][1] = 250

$hBrush = _GDIPlus_PathBrushCreate($aPoints, 4)

Local $aColors[5] = [3]
$aColors[1] = 0xFFFF0000
$aColors[2] = 0xFF00FF00
$aColors[3] = 0xFF0000FF

_GDIPlus_PathBrushSetSurroundColorsWithCount($hBrush, $aColors)
_GDIPlus_PathBrushSetCenterColor($hBrush, 0xFFFFFFFF)
_GDIPlus_GraphicsFillRect($hGraphics, 0, 0, 600, 400, $hBrush)

$aRect = _GDIPlus_PathBrushGetRect($hBrush)
_GDIPlus_GraphicsDrawRect($hGraphics, $aRect[0], $aRect[1], $aRect[2], $aRect[3])

Do
Until GUIGetMsg() = $GUI_EVENT_CLOSE

_GDIPlus_BrushDispose($hBrush)
_GDIPlus_GraphicsDispose($hGraphics)
_GDIPlus_Shutdown()


_GDIPlus_PathBrushGetWrapMode

[edytuj]
#include <GDIPlus.au3>
_GDIPlus_PathBrushGetWrapMode ( $hPathGradientBrush )

Funkcja zwraca tryb nakładania kolejnych płytek gradientu, lub -1 gdy wystąpił błąd.

0 - płytka nie obrócona
1 - płytka obrócona wokół osi pionowej
2 - płytka obrócona wokół osi poziomej
3 - płytka obrócona wokół obu osi

$hPathGradientBrush - uchwyt pędzla z gradientem po ścieżce


_GDIPlus_PathBrushSetWrapMode

[edytuj]
#include <GDIPlus.au3>
_GDIPlus_PathBrushSetWrapMode ( $hPathGradientBrush, $iWrapMode )

Funkcja ustawia tryb nakładania kolejnych płytek gradientu. Zwraca True gdy sukces, lub False gdy wystąpił błąd.

$hPathGradientBrush - uchwyt pędzla z gradientem po ścieżce

$iWrapMode - tryb nakładania kolejnych płytek gradientu:

0 - płytka nie obrócona

1 - płytka obrócona wokół osi pionowej

2 - płytka obrócona wokół osi poziomej

3 - płytka obrócona wokół obu osi

Przykład:

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

$hGUI = GUICreate("GDI+", 1500, 300, -1, 50)
GUISetState()

_GDIPlus_Startup()
$hGraphics = _GDIPlus_GraphicsCreateFromHWND($hGUI)

Local $aPoints[5][2] = [[4]]
$aPoints[1][0] = 0
$aPoints[1][1] = 0
$aPoints[2][0] = 0
$aPoints[2][1] = 100
$aPoints[3][0] = 100
$aPoints[3][1] = 100
$aPoints[4][0] = 100
$aPoints[4][1] = 0
$hBrush = _GDIPlus_PathBrushCreate($aPoints, 0)

Local $aColors[5] = [4]
$aColors[1] = 0xFFFF0000
$aColors[2] = 0xFF00FF00
$aColors[3] = 0xFF0000FF
$aColors[4] = 0xFFFFFF00
_GDIPlus_PathBrushSetSurroundColorsWithCount($hBrush, $aColors)

_GDIPlus_GraphicsFillRect($hGraphics, 0, 0, 300, 300, $hBrush)
MsgBox(0, "", "WrapMode = " & _GDIPlus_PathBrushGetWrapMode ($hBrush))
_GDIPlus_PathBrushSetWrapMode ( $hBrush, 1)
_GDIPlus_GraphicsFillRect($hGraphics, 400, 0, 300, 300, $hBrush)
MsgBox(0, "", "WrapMode = " & _GDIPlus_PathBrushGetWrapMode ($hBrush))
_GDIPlus_PathBrushSetWrapMode ( $hBrush, 2)
_GDIPlus_GraphicsFillRect($hGraphics, 800, 0, 300, 300, $hBrush)
MsgBox(0, "", "WrapMode = " & _GDIPlus_PathBrushGetWrapMode ($hBrush))
_GDIPlus_PathBrushSetWrapMode ( $hBrush, 3)
_GDIPlus_GraphicsFillRect($hGraphics, 1200, 0, 300, 300, $hBrush)
MsgBox(0, "", "WrapMode = " & _GDIPlus_PathBrushGetWrapMode ($hBrush))

_GDIPlus_BrushDispose($hBrush)
_GDIPlus_GraphicsDispose($hGraphics)
_GDIPlus_Shutdown()


_GDIPlus_PathBrushMultiplyTransform

[edytuj]
#include <GDIPlus.au3>
_GDIPlus_PathBrushMultiplyTransform ( $hPathGradientBrush, $hMatrix [, $iOrder = 0] )

Funkcja aktualizuje macierz transformacji pędzla za pomocą metod obiektu matrix. Zwraca True gdy sukces, lub False gdy wystąpił błąd.

Transformacje są definiowane za pomocą funkcji obiektu matrix i powodują przemieszczanie, obroty i skalowanie lokalnego układu współrzędnych związanego z pędzlem.

Dane pędzla i transformacji są zorganizowane w postaci macierzy. Transformacja polega na wymnożeniu macierzy danych przez macierz transformacji.

$hPathGradientBrush - uchwyt pędzla z gradientem po ścieżce

$hMatrix - uchwyt do obiektu matrix

$iOrder - parametr określa kolejność mnożenia macierzy. I tak 0 -> MD * MP, 1 -> MP * MD. Ponieważ mnożenie macierzy nie jest przemienne, najczęściej efekt działania funkcji dla obu wartości parametru będzie różny.

Przykład:

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

$hGUI = GUICreate("GDI+", 400, 400)
GUISetState()

_GDIPlus_Startup()
$hGraphic = _GDIPlus_GraphicsCreateFromHWND($hGUI)

$hPath = _GDIPlus_PathCreate()
_GDIPlus_PathAddRectangle ($hPath, 10, 10, 380, 380)

$hBrush = _GDIPlus_PathBrushCreateFromPath($hPath)
_GDIPlus_PathBrushSetCenterPoint($hBrush, 200, 100)
_GDIPlus_PathBrushSetCenterColor($hBrush, 0xFFFFFFFF)
_GDIPlus_PathBrushSetSurroundColor($hBrush, 0xFFAA00FF)

$hMatrix = _GDIPlus_MatrixCreate()
_GDIPlus_MatrixTranslate($hMatrix, -200, -200)
_GDIPlus_MatrixRotate($hMatrix, 1, True)
_GDIPlus_MatrixTranslate($hMatrix, 200, 200, True)

For $i = 1 To 360
   _GDIPlus_GraphicsFillPath($hGraphic, $hPath, $hBrush)
   _GDIPlus_PathBrushMultiplyTransform($hBrush, $hMatrix, True)
	Sleep(10)
Next

Do
Until GUIGetMsg() = $GUI_EVENT_CLOSE

_GDIPlus_MatrixDispose($hMatrix)
_GDIPlus_PathDispose($hPath)
_GDIPlus_BrushDispose($hBrush)
_GDIPlus_GraphicsDispose($hGraphic)
_GDIPlus_Shutdown()


_GDIPlus_PathBrushResetTransform

[edytuj]
#include <GDIPlus.au3>
_GDIPlus_PathBrushResetTransform ( $hPathGradientBrush )

Funkcja resetuje transformacje geometryczne wykonane ma pędzlu z gradientem po ścieżce. Zwraca True gdy sukces, lub False gdy wystąpił błąd.

Resetowane są przekształcenia związane z przesunięciem i obrotem, ale nie z kolorem i wielkością i położeniem prostokąta definiującego.

$hPathGradientBrush - uchwyt pędzla z gradientem po ścieżce

Przykład:

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

$hGUI = GUICreate("GDI+", 400, 400)
GUISetState()

_GDIPlus_Startup()
$hGraphic = _GDIPlus_GraphicsCreateFromHWND($hGUI)

Local $aPoints[5][2] = [[4]]
$aPoints[1][0] = 0
$aPoints[1][1] = 0
$aPoints[2][0] = 0
$aPoints[2][1] = 400
$aPoints[3][0] = 400
$aPoints[3][1] = 400
$aPoints[4][0] = 400
$aPoints[4][1] = 0
$hBrush = _GDIPlus_PathBrushCreate($aPoints, 0)

Local $aColors[5] = [4]
$aColors[1] = 0xFFFF0000
$aColors[2] = 0xFF00FF00
$aColors[3] = 0xFF0000FF
$aColors[4] = 0xFFFFFF00
_GDIPlus_PathBrushSetSurroundColorsWithCount($hBrush, $aColors)
_GDIPlus_GraphicsFillRect($hGraphic, 0, 0, 400, 400, $hBrush)
Sleep(2000)

$hMatrix = _GDIPlus_MatrixCreate()
_GDIPlus_MatrixTranslate($hMatrix, 400, 400)
_GDIPlus_MatrixRotate($hMatrix, 90, True)

_GDIPlus_PathBrushMultiplyTransform($hBrush, $hMatrix, 1)
_GDIPlus_GraphicsFillRect($hGraphic, 0, 0, 400, 400, $hBrush)
Sleep(3000)

_GDIPlus_PathBrushResetTransform($hBrush) ;zresetowanie transformacji
_GDIPlus_GraphicsFillRect($hGraphic, 0, 0, 400, 400, $hBrush)

Do
Until GUIGetMsg() = $GUI_EVENT_CLOSE

_GDIPlus_BrushDispose($hBrush)
_GDIPlus_GraphicsDispose($hGraphic)
_GDIPlus_Shutdown()


_GDIPlus_PathBrushSetBlend

[edytuj]
#include <GDIPlus.au3>
_GDIPlus_PathBrushSetBlend ( $hPathGradientBrush, $aBlends )

Funkcja ustawia pozycję i proporcje mieszania kolorów gradientu. Zwraca True gdy sukces, lub False gdy wystąpił błąd.

$hPathGradientBrush - uchwyt pędzla z gradientem po ścieżce

$aBlends - tablica zawierająca pozycje i proporcje mieszania kolorów (zakres 0 do 1)

    [0][0] - liczba współczynników proporcji mieszania
    [1][0] - proporcja 1
    [1][1] - pozycja 1
    [2][0] - proporcja 2
    [2][1] - pozycja 2
     ...
    [n][0] - proporcja n
    [n][1] - pozycja n

Współczynnik proporcji określa jaka jest w gradiencie zawartość koloru końcowego w danym miejscu długości gradientu.

Przykład:

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

$hGUI = GUICreate("GDI+", 200, 180)
GUISetState()

_GDIPlus_Startup()
$hGraphics = _GDIPlus_GraphicsCreateFromHWND($hGUI)

$hPath = _GDIPlus_PathCreate()
_GDIPlus_PathAddEllipse($hPath, 10, 10, 180, 160)

$hBrush = _GDIPlus_PathBrushCreateFromPath($hPath)
_GDIPlus_PathBrushSetCenterPoint($hBrush, 100, 90)
_GDIPlus_PathBrushSetSurroundColor($hBrush, 0xFF000000) ;kolor początkowy (obwód ścieżki)
_GDIPlus_PathBrushSetCenterColor($hBrush, 0xFFFF0000)   ;kolor końcowy (punkt centralny)

Local $aBlend[5][2] = [[4]]
$aBlend[1][0] = 0   ;zawartość koloru końcowego 0%
$aBlend[1][1] = 0   ;początek gradientu
$aBlend[2][0] = 0.2 ;na 20% koloru końcowego
$aBlend[2][1] = 0.2 ;20% długości gradientu
$aBlend[3][0] = 1   ;100% koloru końcowego
$aBlend[3][1] = 0.6 ;na 60% długości gradientu
$aBlend[4][0] = 0   ;zawartość koloru końcowego 0%
$aBlend[4][1] = 1   ;koniec gradientu

_GDIPlus_PathBrushSetBlend($hBrush, $aBlend)

$aRect = _GDIPlus_PathBrushGetRect($hBrush)
_GDIPlus_GraphicsFillRect($hGraphics, $aRect[0], $aRect[1], $aRect[2], $aRect[3], $hBrush)

Do
Until GUIGetMsg() = $GUI_EVENT_CLOSE

;zwolnienie zasobów
_GDIPlus_BrushDispose($hBrush)
_GDIPlus_PathDispose($hPath)
_GDIPlus_GraphicsDispose($hGraphics)
_GDIPlus_Shutdown()


_GDIPlus_PathBrushSetCenterColor

[edytuj]
#include <GDIPlus.au3>
_GDIPlus_PathBrushSetCenterColor ( $hPathGradientBrush, $iARGB )

Funkcja ustawia kolor środkowego punktu gradientu. Zwraca True gdy sukces, lub False gdy wystąpił błąd.

$hPathGradientBrush - uchwyt pędzla z gradientem po ścieżce

$iARGB - kolor ponktu środkowego gradientu w formacie AARRGGBB

Przykład:

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

$hGUI = GUICreate("GDI+", 400, 400)
GUISetState()

_GDIPlus_Startup()
$hGraphics = _GDIPlus_GraphicsCreateFromHWND($hGUI)

Local $aPoints[4][2] = [[3]]
$aPoints[1][0] = 200
$aPoints[1][1] = 50
$aPoints[2][0] = 350
$aPoints[2][1] = 350
$aPoints[3][0] = 50
$aPoints[3][1] = 350
$hBrush = _GDIPlus_PathBrushCreate($aPoints, 4)

Local $aColors[5] = [4]
$aColors[1] = 0xFFFF0000
$aColors[2] = 0xFF00FF00
$aColors[3] = 0xFF0000FF
_GDIPlus_PathBrushSetSurroundColorsWithCount($hBrush, $aColors)

_GDIPlus_PathBrushSetCenterColor ($hBrush, 0xFFFFFFFF) ;punkt środkowy biały
_GDIPlus_GraphicsFillRect($hGraphics, 0, 0, 600, 400, $hBrush)

Sleep(2000)

_GDIPlus_PathBrushSetCenterColor ($hBrush, 0xFF000000) ;punkt środkowy czarny
_GDIPlus_GraphicsFillRect($hGraphics, 0, 0, 600, 400, $hBrush)

Do
Until GUIGetMsg() = $GUI_EVENT_CLOSE

_GDIPlus_BrushDispose($hBrush)
_GDIPlus_GraphicsDispose($hGraphics)
_GDIPlus_Shutdown()


_GDIPlus_PathBrushSetGammaCorrection

[edytuj]
#include <GDIPlus.au3>
_GDIPlus_PathBrushSetGammaCorrection ( $hPathGradientBrush, $bUseGammaCorrection )

Funkcja włącza lub wyłącza korekcję gamma kolorów gradientu. Zwraca True gdy sukces, lub False gdy wystąpił błąd.

$hPathGradientBrush - uchwyt pędzla z gradientem po ścieżce

$bUseGammaCorrection - True - korekcja gamma włączona, False - korekcja gamma wyłączona

Przykład:

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

$hGUI = GUICreate("GDI+", 200, 200)
GUISetState()

_GDIPlus_Startup()
$hGraphics = _GDIPlus_GraphicsCreateFromHWND($hGUI)
_GDIPlus_GraphicsClear($hGraphics, 0xFF000000)

$hPath = _GDIPlus_PathCreate()
_GDIPlus_PathAddEllipse($hPath, 10, 10, 180, 180)

$hBrush = _GDIPlus_PathBrushCreateFromPath($hPath)
_GDIPlus_PathBrushSetCenterColor($hBrush, 0xFFFFFF00)
_GDIPlus_PathBrushSetCenterPoint($hBrush, 130, 90)
_GDIPlus_PathBrushSetSurroundColor($hBrush, 0xFF0000FF)

$aRect = _GDIPlus_PathBrushGetRect($hBrush)
_GDIPlus_PathBrushSetGammaCorrection($hBrush, True) ;korekcja gamma włączona
_GDIPlus_GraphicsFillRect($hGraphics, $aRect[0], $aRect[1], $aRect[2], $aRect[3], $hBrush)

Sleep(2000)

_GDIPlus_PathBrushSetGammaCorrection($hBrush, False) ;korekcja gamma wyłączona
_GDIPlus_GraphicsFillRect($hGraphics, $aRect[0], $aRect[1], $aRect[2], $aRect[3], $hBrush)

Do
Until GUIGetMsg() = $GUI_EVENT_CLOSE

_GDIPlus_BrushDispose($hBrush)
_GDIPlus_PathDispose($hPath)
_GDIPlus_GraphicsDispose($hGraphics)
_GDIPlus_Shutdown()


_GDIPlus_PathBrushSetLinearBlend

[edytuj]
#include <GDIPlus.au3>
_GDIPlus_PathBrushSetLinearBlend ( $hPathGradientBrush, $fFocus [, $fScale = 1] )

Funkcja ustawia pozycję i proporcje mieszania kolorów gradientu. Zwraca True gdy sukces, lub False gdy wystąpił błąd.

$hPathGradientBrush - uchwyt pędzla z gradientem po ścieżce

$fFocus - pozycja na długości gradientu z maksymalnym nasyceniem koloru końcowego (od 0 do 1, 0 - początek gradientu, 1 - koniec gradientu). Jeżeli 0 > $fFocus > 1 to początek i koniec gradientu mają kolor początkowy.

$fScale - maksymalne nasycenie koloru końcowego (od 0 do 1, 1 = 100%)

Przykład:

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

$hGUI = GUICreate("GDI+", 200, 180)
GUISetState()

_GDIPlus_Startup()
$hGraphics = _GDIPlus_GraphicsCreateFromHWND($hGUI)
_GDIPlus_GraphicsClear($hGraphics, 0xFF000000)

$hPath = _GDIPlus_PathCreate()
_GDIPlus_PathAddEllipse($hPath, 10, 10, 180, 160)

$hBrush = _GDIPlus_PathBrushCreateFromPath($hPath)

_GDIPlus_PathBrushSetCenterPoint($hBrush, 100, 90)


;kolor początkowy nie został zdefiniowany, więc domyślnie jest to kolor biały
;kolor punktu centralnego (końcowy kolor gradientu)
_GDIPlus_PathBrushSetCenterColor($hBrush, 0xFF0000FF)

;max. koloru końcowego (90%)na 20% długości gradientu
_GDIPlus_PathBrushSetLinearBlend($hBrush, 0.2, 0.9)

_GDIPlus_GraphicsFillPath($hGraphics, $hPath, $hBrush)

Do
Until GUIGetMsg() = $GUI_EVENT_CLOSE

_GDIPlus_BrushDispose($hBrush)
_GDIPlus_PathDispose($hPath)
_GDIPlus_GraphicsDispose($hGraphics)
_GDIPlus_Shutdown()


_GDIPlus_PathBrushSetPresetBlend

[edytuj]
#include <GDIPlus.au3>
_GDIPlus_PathBrushSetPresetBlend ( $hPathGradientBrush, $aInterpolations )

Funkcja ustawia położenie i barwę mieszania kilku kolorów (gradient wielokolorowy). Zwraca True gdy sukces, lub False gdy wystąpił błąd.

$hPathGradientBrush - uchwyt pędzla z gradientem po ścieżce

$aInterpolations - 2-wymiarowa tablica zawierająca dane mieszanych kolorów

[0][0] - ilość mieszanych kolorów
[1][0] - kolor 1
[1][1] - położenie 1
[2][0] - kolor 2
[2][1] - położenie 2
 ...
[n][0] - kolor n
[n][1] - położenie n

Przykład:

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

$hGUI = GUICreate("GDI+", 200, 180)
GUISetState()

_GDIPlus_Startup()
$hGraphics = _GDIPlus_GraphicsCreateFromHWND($hGUI)
_GDIPlus_GraphicsClear($hGraphics, 0xFF000000)

$hPath = _GDIPlus_PathCreate()
_GDIPlus_PathAddEllipse($hPath, 10, 10, 180, 160)

$hBrush = _GDIPlus_PathBrushCreateFromPath($hPath)
_GDIPlus_PathBrushSetCenterPoint($hBrush, 100, 90)

Dim $aInterpolations[6][2]
$aInterpolations[0][0] = 5
$aInterpolations[1][0] = 0xFFD00000 ;Czerwony
$aInterpolations[1][1] = 0
$aInterpolations[2][0] = 0xFFFFFF00 ;Żółty
$aInterpolations[2][1] = 0.25
$aInterpolations[3][0] = 0xFF00FF00 ;Zielony
$aInterpolations[3][1] = 0.5
$aInterpolations[4][0] = 0xFF0080FF ;Niebieski
$aInterpolations[4][1] = 0.75
$aInterpolations[5][0] = 0xFF7000A0 ;Fioletowy
$aInterpolations[5][1] = 1
_GDIPlus_PathBrushSetPresetBlend($hBrush, $aInterpolations)

$aRect = _GDIPlus_PathBrushGetRect($hBrush)
_GDIPlus_GraphicsFillRect($hGraphics, $aRect[0], $aRect[1], $aRect[2], $aRect[3], $hBrush)

Do
Until GUIGetMsg() = $GUI_EVENT_CLOSE

_GDIPlus_BrushDispose($hBrush)
_GDIPlus_PathDispose($hPath)
_GDIPlus_GraphicsDispose($hGraphics)
_GDIPlus_Shutdown()


_GDIPlus_PathBrushSetSigmaBlend

[edytuj]
#include <GDIPlus.au3>
_GDIPlus_PathBrushSetSigmaBlend ( $hPathGradientBrush, $fFocus [, $fScale = 1] )

Funkcja ustawienie mieszanie kolorów gradientu wg kształtu krzywej dzwonowej. Zwraca True gdy sukces, lub False gdy wystąpił błąd.

$hPathGradientBrush - uchwyt pędzla z gradientem liniowym

$fFocus - określa w którym miejscu długości gradientu znajduje się barwa końcowa (zakres od 0 do 1, 0 - na początku, 1 - na końcu)

$fScale - określa intensywność barwy końcowej w gradiencie (zakres od 0 do 1, 0 - brak koloru, 1 - 100%)

Przykład:

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

$hGUI = GUICreate("GDI+", 200, 180)
GUISetState()

_GDIPlus_Startup()
$hGraphics = _GDIPlus_GraphicsCreateFromHWND($hGUI)
_GDIPlus_GraphicsClear($hGraphics, 0xFF000000)

$hPath = _GDIPlus_PathCreate()
_GDIPlus_PathAddEllipse($hPath, 10, 10, 180, 160)

$hBrush = _GDIPlus_PathBrushCreateFromPath($hPath)
_GDIPlus_PathBrushSetCenterColor($hBrush, 0xFF0000FF)
_GDIPlus_PathBrushSetSigmaBlend($hBrush, 0.25, 0.80)
_GDIPlus_GraphicsFillPath($hGraphics, $hPath, $hBrush)

Do
Until GUIGetMsg() = $GUI_EVENT_CLOSE

_GDIPlus_BrushDispose($hBrush)
_GDIPlus_PathDispose($hPath)
_GDIPlus_GraphicsDispose($hGraphics)
_GDIPlus_Shutdown()


_GDIPlus_PathBrushSetSurroundColor

[edytuj]
#include <GDIPlus.au3>
_GDIPlus_PathBrushSetSurroundColor ( $hPathGradientBrush, $iARGB )

Funkcja ustawia kolor obwodu ścieżki pędzla (kolor początkowy gradientu). Zwraca True gdy sukces, lub False gdy wystąpił błąd.

$hPathGradientBrush - uchwyt pędzla z gradientem liniowym

$iARGB - kod koloru w formacie AARRGGBB

Przykład:

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

$hGUI = GUICreate("GDI+", 400, 400)
GUISetState()

_GDIPlus_Startup()
$hGraphics = _GDIPlus_GraphicsCreateFromHWND($hGUI)
_GDIPlus_GraphicsClear($hGraphics, 0xFF000000)

$hPath = _GDIPlus_PathCreate()
_GDIPlus_PathAddLine($hPath, 106, 330, 200, 40)
_GDIPlus_PathAddLine($hPath, 294, 330, 48, 151)
_GDIPlus_PathAddLine($hPath, 352, 151, 106, 330)
_GDIPlus_PathWindingModeOutline($hPath)

$hBrush = _GDIPlus_PathBrushCreateFromPath($hPath)

_GDIPlus_PathBrushSetSurroundColor($hBrush, 0xFF0000FF)

$aRect = _GDIPlus_PathBrushGetRect($hBrush)
_GDIPlus_GraphicsFillRect($hGraphics, $aRect[0], $aRect[1], $aRect[2], $aRect[3], $hBrush)


Do
Until GUIGetMsg() = $GUI_EVENT_CLOSE

_GDIPlus_BrushDispose($hBrush)
_GDIPlus_PathDispose($hPath)
_GDIPlus_GraphicsDispose($hGraphics)
_GDIPlus_Shutdown()


_GDIPlus_PathBrushSetSurroundColorsWithCount

[edytuj]
#include <GDIPlus.au3>
_GDIPlus_PathBrushSetSurroundColorsWithCount ( $hPathGradientBrush, $aColors )

Funkcja ustawia kolory obwodu ścieżki pędzla (kolory początkowe gradientu). Zwraca True gdy sukces, lub False gdy wystąpił błąd.

$hPathGradientBrush - uchwyt pędzla z gradientem liniowym

$aColors - jednowymiarowa tablica zawierająca kolory kolejnych punktów obwodu pędzla

[0] - ilość kolorów
[1] - kolor 1 punktu
[2] - kolor 2 punktu
...
[n] - kolor n-tego punktu

Przykład:

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

$hGUI = GUICreate("GDI+", 400, 400)
GUISetState()

_GDIPlus_Startup()
$hGraphics = _GDIPlus_GraphicsCreateFromHWND($hGUI)
_GDIPlus_GraphicsClear($hGraphics, 0xFF000000)

$hPath = _GDIPlus_PathCreate()
_GDIPlus_PathAddLine($hPath, 106, 330, 200, 40)
_GDIPlus_PathAddLine($hPath, 294, 330, 48, 151)
_GDIPlus_PathAddLine($hPath, 352, 151, 106, 330)
_GDIPlus_PathWindingModeOutline($hPath)

$hBrush = _GDIPlus_PathBrushCreateFromPath($hPath)

Dim $aColors[11] = [10]
$aColors[1] = 0xFFFF0000
$aColors[2] = 0xFF000000
$aColors[3] = 0xFFFFFF00
$aColors[4] = 0xFF000000
$aColors[5] = 0xFF00FF00
$aColors[6] = 0xFF000000
$aColors[7] = 0xFF00FFFF
$aColors[8] = 0xFF000000
$aColors[9] = 0xFF0000FF
$aColors[10] = 0xFF000000

_GDIPlus_PathBrushSetSurroundColorsWithCount($hBrush, $aColors)

_GDIPlus_GraphicsFillPath($hGraphics, $hPath, $hBrush)

Do
Until GUIGetMsg() = $GUI_EVENT_CLOSE

_GDIPlus_BrushDispose($hBrush)
_GDIPlus_PathDispose($hPath)
_GDIPlus_GraphicsDispose($hGraphics)
_GDIPlus_Shutdown()


_GDIPlus_PathBrushSetTransform

[edytuj]
#include <GDIPlus.au3>
_GDIPlus_PathBrushSetTransform ( $hPathGradientBrush, $hMatrix )

Funkcja ustawia macierz przekształcenia gradientu po ścieżce pędzla, co jest równoważne z transformacją do nowego układu współrzędnych. Zwraca True gdy sukces, lub False gdy wystąpił błąd.

$hPathGradientBrush - uchwyt pędzla z gradientem po ścieżce

$hMatrix - wskaźnik do macierzy transformacji

Przykład:

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

$hGUI = GUICreate("GDI+", 400, 400)
GUISetState()

_GDIPlus_Startup()
$hGraphic = _GDIPlus_GraphicsCreateFromHWND($hGUI)
_GDIPlus_GraphicsClear($hGraphic, 0xFFFFFFFF)

$hPath = _GDIPlus_PathCreate()
_GDIPlus_PathAddEllipse($hPath, 0, 0, 150, 150)

$hBrush = _GDIPlus_PathBrushCreateFromPath($hPath)
_GDIPlus_PathBrushSetCenterColor($hBrush, 0xFFFF0000)

$hMatrix = _GDIPlus_MatrixCreate()

For $i = 0 To 360
   If $i = 0 Then _GDIPlus_MatrixTranslate($hMatrix,200, 200)
   _GDIPlus_MatrixRotate($hMatrix, 2) ;obrót układu współrzędnych o 2 stopnie
   _GDIPlus_PathBrushSetTransform($hBrush, $hMatrix)
   _GDIPlus_GraphicsFillRect($hGraphic, 0, 0, 400, 400, $hBrush)
   Sleep(50)
Next

Do
Until GUIGetMsg() = $GUI_EVENT_CLOSE

_GDIPlus_MatrixDispose($hMatrix)
_GDIPlus_BrushDispose($hBrush)
_GDIPlus_GraphicsDispose($hGraphic)
_GDIPlus_Shutdown()


Obiekt TextureBrush (Pędzel z teksturą)

[edytuj]

_GDIPlus_TextureCreate

[edytuj]
#include <GDIPlus.au3>
_GDIPlus_TextureCreate ( $hImage [, $iWrapMode = 0] )

Funkcja tworzy pędzel z teksturą na podstawie obiektu Image. Zwraca uchwyt do pędzla lub 0 gdy wystąpił błąd.

$hImage - uchwyt do obiektu Image

$iWrapMod - parametr określający tryb nakładania kolejnych płytek tekstury:

0 - płytka nie obrócona

1 - płytka obrócona wokół osi pionowej

2 - płytka obrócona wokół osi poziomej

3 - płytka obrócona wokół obu osi

4 - tylko pojedyncza płytka

Przykład:

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

Dim $sWow64

If @AutoItX64 Then $sWow64 = "\Wow6432Node"

$sRegPath = "HKLM\SOFTWARE" & $sWow64 & "\AutoIt v3\AutoIt"

$sFile = RegRead($sRegPath, "InstallDir") & "\Examples\GUI\logo4.gif"
If Not FileExists($sFile) Then
   MsgBox(0, "", $sFile & " Brak pliku!", 10)
   Exit
EndIf

_GDIPlus_Startup()

;utworzenie obiektu Image na podstawie pliku z bitmapą
$hImage = _GDIPlus_ImageLoadFromFile($sFile)
If @error Then
   _GDIPlus_Shutdown()
   MsgBox(0 , "", "Błąd pliku!", 10)
   Exit
EndIf

$hGUI = GUICreate("GDI+", 600, 400)
GUISetState()

$hGraphics = _GDIPlus_GraphicsCreateFromHWND($hGUI)
$hBrush = _GDIPlus_TextureCreate($hImage, 3) ;utworzenie pędzla z teksturą
_GDIPlus_GraphicsFillRect($hGraphics, 0, 0, 600, 400, $hBrush)

Do
Until GUIGetMsg() = $GUI_EVENT_CLOSE

_GDIPlus_BrushDispose($hBrush)
_GDIPlus_ImageDispose($hImage)
_GDIPlus_GraphicsDispose($hGraphics)
_GDIPlus_Shutdown()
GUIDelete($hGUI)


_GDIPlus_TextureCreate2

[edytuj]
#include <GDIPlus.au3>
_GDIPlus_TextureCreate2 ( $hImage, $nX, $nY, $nWidth, $nHeight [, $iWrapMode = 0] )

Funkcja tworzy pędzel z teksturą na podstawie obiektu Image. Zwraca uchwyt do pędzla lub 0 gdy wystąpił błąd.

W odróżnieniu od poprzednio opisanej funkcji _GDIPlus_TextureCreate można wybrać dowolną część obrazka jako teksturą.

$hImage - uchwyt do obiektu Image

$nX, $nY - współrzędne lewego górnego narożnika wybranego fragmentu obrazu

$nWidth, $nHeight - szerokość i wysokość wybranego fragmentu obrazu

$iWrapMod - parametr określający tryb nakładania kolejnych płytek tekstury:

0 - płytka nie obrócona

1 - płytka obrócona wokół osi pionowej

2 - płytka obrócona wokół osi poziomej

3 - płytka obrócona wokół obu osi

4 - tylko pojedyncza płytka

Przykład:

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

Dim $sWow64

If @AutoItX64 Then $sWow64 = "\Wow6432Node"

$sRegPath = "HKLM\SOFTWARE" & $sWow64 & "\AutoIt v3\AutoIt"

$sFile = RegRead($sRegPath, "InstallDir") & "\Examples\GUI\logo4.gif"
If Not FileExists($sFile) Then
	MsgBox(0, "", $sFile & " Brak pliku!", 10)
	Exit
EndIf

_GDIPlus_Startup()

;utworzenie obiektu Image na podstawie pliku z bitmapą
$hImage = _GDIPlus_ImageLoadFromFile($sFile)
If @error Then
	_GDIPlus_Shutdown()
	MsgBox(0 , "", "Błąd pliku!", 10)
	Exit
EndIf

$hGUI = GUICreate("GDI+", 600, 400)
GUISetState()

$hGraphics = _GDIPlus_GraphicsCreateFromHWND($hGUI)
$hBrush = _GDIPlus_TextureCreate2($hImage, 0, 0, 65, 65, 3) ;utworzenie pędzla z teksturą
_GDIPlus_GraphicsFillRect($hGraphics, 0, 0, 600, 400, $hBrush)

Do
Until GUIGetMsg() = $GUI_EVENT_CLOSE

_GDIPlus_BrushDispose($hBrush)
_GDIPlus_ImageDispose($hImage)
_GDIPlus_GraphicsDispose($hGraphics)
_GDIPlus_Shutdown()
GUIDelete($hGUI)


_GDIPlus_TextureCreateIA

[edytuj]
#include <GDIPlus.au3>
_GDIPlus_TextureCreateIA ( $hImage, $nX, $nY, $nWidth, $nHeight [, $pImageAttributes = 0] )

Funkcja tworzy pędzel z teksturą na podstawie obiektu Image. Zwraca uchwyt do pędzla lub 0 gdy wystąpił błąd.

W odróżnieniu od poprzednio opisanej funkcji _GDIPlus_TextureCreate można wybrać dowolną część obrazka jako teksturą.

$hImage - uchwyt do obiektu Image

$nX, $nY - współrzędne lewego górnego narożnika wybranego fragmentu obrazu

$nWidth, $nHeight - szerokość i wysokość wybranego fragmentu obrazu

$pImageAttributes - wskaźnik do obiektu ImageAttributes który zawiera właściwości obrazu

Obiekt arrow (grot strzałki)

[edytuj]

Poniżej kilka funkcji do obsługi obiektu będącego grotem strzałki. Obiekt ten może być następnie użyty jako niestandardowe zakończenie linii (_GDIPlus_PenSetCustomEndCap).

_GDIPlus_ArrowCapCreate

[edytuj]
#include <GDIPlus.au3>
_GDIPlus_ArrowCapCreate($fHeight, $fWidth [, $bFilled = True])

Funkcja tworzy obiekt będący grotem strzałki. Zwraca uchwyt do obiektu, lub 0 gdy wystąpił błąd.

$fHeight, $fWidth - długość i szerokość grotu (jednostką jest grubość linii)

$bFilled - wypełnienie grotu, TRUE - grot wypełniony, FALSE - grot nie wypełniony

UWAGA: Grot jest skalowalny, tzn. że po zmianie grubości linii następuje automatycznie proporcjonalne powiększenie jego wymiarów.

Likwidacja obiektu za pomocą _GDIPlus_ArrowCapDispose.


_GDIPlus_ArrowCapDispose

[edytuj]
#include <GDIPlus.au3>
_GDIPlus_ArrowCapDispose($hArrowCap)

Funkcja likwiduje obiekt będący grotem strzałki. Zwraca TRUE gdy sukces, lub FALSE gdy wystąpił błąd.

$hArrowCap - uchwyt do obiektu zwrócony przez _GDIPlus_ArrowCapCreate

Przykład:

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

;tworzenie GUI
$hGUI = GUICreate("GDI+", 400, 300)
GUISetState()

;tworzenie zasobów
_GDIPlus_Startup()
$hGraphic = _GDIPlus_GraphicsCreateFromHWND($hGUI)
$hPen = _GDIPlus_PenCreate(0xFF000000, 6)
$hEndCap = _GDIPlus_ArrowCapCreate(3, 6)
_GDIPlus_PenSetCustomEndCap($hPen, $hEndCap)

;rysowanie strzałki
_GDIPlus_GraphicsDrawLine($hGraphic, 10, 100, 390, 100, $hPen)

Do
Until GUIGetMsg() = $GUI_EVENT_CLOSE

;zwolnienie zasobów
_GDIPlus_ArrowCapDispose($hEndCap)
_GDIPlus_PenDispose($hPen)
_GDIPlus_GraphicsDispose($hGraphic)
_GDIPlus_Shutdown()


_GDIPlus_ArrowCapSetHeight

[edytuj]
#include <GDIPlus.au3>
_GDIPlus_ArrowCapSetHeight($hArrowCap, $fHeight)

Funkcja zmienia długość grotu. Zwraca TRUE gdy sukces, lub FALSE gdy wystąpił błąd.

$hArrowCap - uchwyt do obiektu zwrócony przez _GDIPlus_ArrowCapCreate

$fHeight - długość grotu (jednostką jest grubość linii)


_GDIPlus_ArrowCapGetHeight

[edytuj]
#include <GDIPlus.au3>
_GDIPlus_ArrowCapGetHeight($hArrowCap)

Funkcja odczytuje i zwraca długość grotu (jednostką jest grubość linii). Jeżeli wystąpił błąd zwracane jest -1.

$hArrowCap - uchwyt do obiektu zwrócony przez _GDIPlus_ArrowCapCreate

Przykład:

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

;tworzenie GUI
$hGUI = GUICreate("GDI+", 400, 300)
GUISetState()

;tworzenie zasobów
_GDIPlus_Startup()
$hGraphic = _GDIPlus_GraphicsCreateFromHWND($hGUI)
$hPen = _GDIPlus_PenCreate(0xFF000000, 6)
$hEndCap = _GDIPlus_ArrowCapCreate(3, 6)
_GDIPlus_PenSetCustomEndCap($hPen, $hEndCap)

;rysowanie strzałki
_GDIPlus_GraphicsDrawLine($hGraphic, 10, 100, 390, 100, $hPen)

;długość grotu zwiększona o 10
$fL = _GDIPlus_ArrowCapGetHeight($hEndCap)
_GDIPlus_ArrowCapSetHeight($hEndCap, $fL+10)
_GDIPlus_PenSetCustomEndCap($hPen, $hEndCap)
_GDIPlus_GraphicsDrawLine($hGraphic, 10, 150, 390, 150, $hPen)

Do
Until GUIGetMsg() = $GUI_EVENT_CLOSE

;zwolnienie zasobów
_GDIPlus_ArrowCapDispose($hEndCap)
_GDIPlus_PenDispose($hPen)
_GDIPlus_GraphicsDispose($hGraphic)
_GDIPlus_Shutdown()


_GDIPlus_ArrowCapSetWidth

[edytuj]
#include <GDIPlus.au3>
_GDIPlus_ArrowCapSetWidth($hArrowCap, $fWidth)

Funkcja zmienia szerokość grotu. Zwraca TRUE gdy sukces, lub FALSE gdy wystąpił błąd.

$hArrowCap - uchwyt do obiektu zwrócony przez _GDIPlus_ArrowCapCreate

$fWidth - szerokość grotu (jednostką jest grubość linii)


_GDIPlus_ArrowCapGetWidth

[edytuj]
#include <GDIPlus.au3>
_GDIPlus_ArrowCapGetHeight($hArrowCap)

Funkcja odczytuje i zwraca szerokość grotu (jednostką jest grubość linii). Jeżeli wystąpił błąd zwracane jest -1.

$hArrowCap - uchwyt do obiektu zwrócony przez _GDIPlus_ArrowCapCreate

Przykład:

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

;tworzenie GUI
$hGUI = GUICreate("GDI+", 400, 300)
GUISetState()

;tworzenie zasobów
_GDIPlus_Startup()
$hGraphic = _GDIPlus_GraphicsCreateFromHWND($hGUI)
$hPen = _GDIPlus_PenCreate(0xFF000000, 6)
$hEndCap = _GDIPlus_ArrowCapCreate(3, 6)
_GDIPlus_PenSetCustomEndCap($hPen, $hEndCap)

;rysowanie strzałki
_GDIPlus_GraphicsDrawLine($hGraphic, 10, 100, 390, 100, $hPen)

;szerokość grotu zwiększona o 10
$fS = _GDIPlus_ArrowCapGetWidth($hEndCap)
_GDIPlus_ArrowCapSetWidth($hEndCap, $fS+10)
_GDIPlus_PenSetCustomEndCap($hPen, $hEndCap)
_GDIPlus_GraphicsDrawLine($hGraphic, 10, 200, 390, 200, $hPen)

Do
Until GUIGetMsg() = $GUI_EVENT_CLOSE

;zwolnienie zasobów
_GDIPlus_ArrowCapDispose($hEndCap)
_GDIPlus_PenDispose($hPen)
_GDIPlus_GraphicsDispose($hGraphic)
_GDIPlus_Shutdown()


_GDIPlus_ArrowCapSetFillState

[edytuj]
#include <GDIPlus.au3>
_GDIPlus_ArrowCapSetFillState($hArrowCap, $bFilled = True)

Funkcja zmienia wypełnieni grotu. Zwraca TRUE gdy sukces, lub FALSE gdy wystąpił błąd.

$hArrowCap - uchwyt do obiektu zwrócony przez _GDIPlus_ArrowCapCreate

$bFilled - wypełnienie grotu, TRUE - grot wypełniony, FALSE - grot nie wypełniony

Przykład:

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

;tworzenie GUI
$hGUI = GUICreate("GDI+", 400, 300)
GUISetState()

;tworzenie zasobów
_GDIPlus_Startup()
$hGraphic = _GDIPlus_GraphicsCreateFromHWND($hGUI)
$hPen = _GDIPlus_PenCreate(0xFF000000, 4)
$hEndCap = _GDIPlus_ArrowCapCreate(4, 6)

;rysowanie strzałki
_GDIPlus_PenSetCustomEndCap($hPen, $hEndCap)
_GDIPlus_GraphicsDrawLine($hGraphic, 10, 100, 390, 100, $hPen)

;grot niewypełniony
_GDIPlus_ArrowCapSetFillState($hEndCap, False)
_GDIPlus_PenSetCustomEndCap($hPen, $hEndCap)
_GDIPlus_GraphicsDrawLine($hGraphic, 10, 160, 390, 160, $hPen)


Do
Until GUIGetMsg() = $GUI_EVENT_CLOSE

;zwolnienie zasobów
_GDIPlus_ArrowCapDispose($hEndCap)
_GDIPlus_PenDispose($hPen)
_GDIPlus_GraphicsDispose($hGraphic)
_GDIPlus_Shutdown()


_GDIPlus_ArrowCapGetFillState

[edytuj]
#include <GDIPlus.au3>
_GDIPlus_ArrowCapGetFillState($hArrowCap)

Funkcja odczytuje i zwraca kod wypełnienia grotu (TRUE - grot wypełniony, FALSE - grot nie wypełniony). Jeżeli wystąpił błąd zwracane jest -1.

$hArrowCap - uchwyt do obiektu zwrócony przez _GDIPlus_ArrowCapCreate


_GDIPlus_ArrowCapSetMiddleInset

[edytuj]
#include <GDIPlus.au3>
_GDIPlus_ArrowCapSetMiddleInset($hArrowCap, $fInset)

Funkcja ustala głębokość wcięcia w tylnej części grotu. Zwraca TRUE gdy sukces, lub FALSE gdy wystąpił błąd.

$hArrowCap - uchwyt do obiektu zwrócony przez _GDIPlus_ArrowCapCreate

$fInset - głębokość wcięcia (jednostką jest grubość linii), dla wartości ujemnych wypukłość zamiast wcięcia.


_GDIPlus_ArrowCapGetMiddleInset

[edytuj]
#include <GDIPlus.au3>
_GDIPlus_ArrowCapGetMiddleInset($hArrowCap)

Funkcja odczytuje i zwraca głębokość wcięcia grotu (jednostką jest grubość linii). Jeżeli wystąpił błąd zwracane jest -1.

$hArrowCap - uchwyt do obiektu zwrócony przez _GDIPlus_ArrowCapCreate

Przykład:

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

;tworzenie GUI
$hGUI = GUICreate("GDI+", 400, 300)
GUISetState()

;tworzenie zasobów
_GDIPlus_Startup()
$hGraphic = _GDIPlus_GraphicsCreateFromHWND($hGUI)
$hPen = _GDIPlus_PenCreate(0xFF000000, 6)
$hEndCap = _GDIPlus_ArrowCapCreate(3, 6)

;grot bez wcięcia
_GDIPlus_PenSetCustomEndCap($hPen, $hEndCap)
_GDIPlus_GraphicsDrawLine($hGraphic, 10, 100, 390, 100, $hPen)

;grot z wcięciem 0.5
_GDIPlus_ArrowCapSetMiddleInset($hEndCap, 0.5)
_GDIPlus_PenSetCustomEndCap($hPen, $hEndCap)
_GDIPlus_GraphicsDrawLine($hGraphic, 10, 150, 390, 150, $hPen)

;grot z wcięciem powiększonym o 1
$iInset = _GDIPlus_ArrowCapGetMiddleInset($hEndCap) + 1
_GDIPlus_ArrowCapSetMiddleInset($hEndCap, $iInset)
_GDIPlus_PenSetCustomEndCap($hPen, $hEndCap)
_GDIPlus_GraphicsDrawLine($hGraphic, 10, 200, 390, 200, $hPen)

;grot z wypukłością
_GDIPlus_ArrowCapSetMiddleInset($hEndCap, -1)
_GDIPlus_PenSetCustomEndCap($hPen, $hEndCap)
_GDIPlus_GraphicsDrawLine($hGraphic, 10, 250, 390, 250, $hPen)

Do
Until GUIGetMsg() = $GUI_EVENT_CLOSE

;zwolnienie zasobów
_GDIPlus_ArrowCapDispose($hEndCap)
_GDIPlus_PenDispose($hPen)
_GDIPlus_GraphicsDispose($hGraphic)
_GDIPlus_Shutdown()


Niestandardowe zakończenie linii

[edytuj]

Kilka funkcji do definiowanie niestandardowego zakończenie linni.

_GDIPlus_CustomLineCapCreate

[edytuj]
#include <GDIPlus.au3>
_GDIPlus_CustomLineCapCreate ( $hPathFill, $hPathStroke [, $iLineCap = 0 [, $iBaseInset = 0]] )

Funkcja tworzy obiekt będący niestandardowym zakończeniem linii. Zwraca uchwyt do obiektu, lub 0 gdy wystąpił błąd.

$hPathFill - uchwyt do ścieżki z opisem wypełnienia zakończenia linii, 0 - brak wypełnienia

$hPathStroke - uchwyt do ścieżki z opisem konturu zakończenia linii, 0 - brak konturu

$iLineCap - ten parametr nie powoduje żadnego działania, domyślnie ma wartość 0 i niech tak zostanie

$iBaseInset - odległość między zdefiniowanym zakończeniem, a końcem linii

Przykład:

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

_GDIPlus_Startup()

$hGUI = GUICreate("Niestandardowe zakończenie linii", 400, 300)
GUISetState()

$hGraphics = _GDIPlus_GraphicsCreateFromHWND($hGUI)

;tworzenie ścieżki z opisem kształtu zakończenia linii
$hPath = _GDIPlus_PathCreate()
_GDIPlus_PathAddLine($hPath, -15, -15, 0, 0)
_GDIPlus_PathAddLine($hPath, 0, 0, 15, -15)
_GDIPlus_PathAddEllipse($hPath, -6,-15, 12, 12)

;tworzenie zakończenia linii na podstawie zdefiniowanej ścieżki
$hCustomLineCap = _GDIPlus_CustomLineCapCreate(0, $hPath)

;tworzenie pióra z niestandardowym zakończeniem
$hPen = _GDIPlus_PenCreate(0xFFFF0000, 2)
_GDIPlus_PenSetCustomEndCap($hPen, $hCustomLineCap)

;rysowanie linii z niestandardowym zakończeniem
_GDIPlus_GraphicsDrawLine($hGraphics, 200, 100, 350, 50, $hPen)
_GDIPlus_GraphicsDrawLine($hGraphics, 200, 100, 50, 50, $hPen)
_GDIPlus_GraphicsDrawLine($hGraphics, 200, 100, 200, 250, $hPen)

Do
Until GUIGetMsg() = $GUI_EVENT_CLOSE

;zwolnienie zasobów
_GDIPlus_PenDispose($hPen)
_GDIPlus_CustomLineCapDispose($hCustomLineCap)
_GDIPlus_PathDispose($hPath)
_GDIPlus_GraphicsDispose($hGraphics)
_GDIPlus_Shutdown()


_GDIPlus_CustomLineCapClone

[edytuj]
#include <GDIPlus.au3>
_GDIPlus_CustomLineCapClone ( $hCustomLineCap )

Funkcja klonuje obiekt CustomLineCap. Zwraca uchwyt do utworzonego obiektu, lub 0 gdy wystąpił błąd.

$hCustomLineCap - uchwyt do klonowanego obiektu


_GDIPlus_CustomLineCapDispose

[edytuj]
#include <GDIPlus.au3>
_GDIPlus_CustomLineCapDispose ( $hCap )

Funkcja likwiduje obiekt CustomLineCap. Zwraca True gdy sukces, lub False gdy wystąpił błąd.

$hCap - uchwyt do klonowanego obiektu

Fonty (czcionki) i stringi (teksty)

[edytuj]

Kilka funkcji do definiowania fontów, których można użyć do tworzenia tekstów wstawianych w obszarze grafiki za pomocą funkcji _GDIPlus_GraphicsDrawStringEx.

_GDIPlus_FontFamilyCreate

[edytuj]
#include <GDIPlus.au3>
_GDIPlus_FontFamilyCreate($sFamily)

Funkcja tworzy rodzinę fontów. Zwraca uchwyt do tej rodziny, lub 0 gdy wystąpił błąd.

$sFamily - nazwa rodziny fontów jak w systemie, np. "arial", "courier" itp.

Likwidacja obiektu za pomocą _GDIPlus_FontFamilyDispose.


_GDIPlus_FontFamilyDispose

[edytuj]
#include <GDIPlus.au3>
_GDIPlus_FontFamilyDispose($hFamily)

Funkcja likwiduje rodzinę fontów. Zwraca TRUE gdy sukces, lub FALSE gdy wystąpił błąd.

$hFamily - uchwyt do rodziny fontów zwracany przez _GDIPlus_FontFamilyCreate


_GDIPlus_FontCreate

[edytuj]
#include <GDIPlus.au3>
_GDIPlus_FontCreate($hFamily, $fSize [, $iStyle = 0 [, $iUnit = 3]])

Funkcja tworzy font. Zwraca uchwyt do fontu, lub 0 gdy wystąpił błąd.

$hFamily - uchwyt do rodziny fontów zwracany przez _GDIPlus_FontFamilyCreate

$fSize - rozmiar czcionki mierzony w jednostkach określonych w $iUnit

$iStyle - styl fontu (wartości można sumować):

0 - normalny
1 - wytłuszczony
2 - kursywa
4 - podkreślony
8 - przekreślony

$iUnit - jednostka wielkości fontu:

2 - 1 piksel
3 - 1 punkt (1/72 cala)
4 - 1 cal
5 - 1/300 cala
6 - 1 milimetr

Likwidacja obiektu za pomocą _GDIPlus_FontDispose.


_GDIPlus_FontDispose

[edytuj]
#include <GDIPlus.au3>
_GDIPlus_FontDispose($hFont)

Funkcja likwiduje font. Zwraca TRUE gdy sukces, lub FALSE gdy wystąpił błąd.

$hFont - uchwyt do fontu zwracany przez _GDIPlus_FontCreate


_GDIPlus_StringFormatCreate

[edytuj]
#include <GDIPlus.au3>
_GDIPlus_StringFormatCreate([$iFormat = 0 [, $iLangID = 0]])

Funkcja tworzy format stringu. Zwraca uchwyt do tego formatu, lub 0 gdy wystąpił błąd.

Parametry oba opcjonalne, w zasadzie można je pominąć, gdyż najczęściej korzysta się z ustawień domyślnych. Dla dociekliwych opis w Helpie.

$iFormat - kod formatu (np. 0 - tekst wpisywany w prawo (domyślne), 1 - tekst wpisywany w lewo, 2 - tekst wpisywany w pionie)

$iLangID - kod języka

Likwidacja obiektu za pomocą _GDIPlus_StringFormatDispose.


_GDIPlus_StringFormatDispose

[edytuj]
#include <GDIPlus.au3>
_GDIPlus_StringFormatDispose($hFormat)

Funkcja likwiduje format stringu. Zwraca TRUE gdy sukces, lub FALSE gdy wystąpił błąd.

$hFormat - uchwyt do formatu zwrócony przez _GDIPlus_StringFormatCreate


_GDIPlus_StringFormatSetAlign

[edytuj]
#include <GDIPlus.au3>
_GDIPlus_StringFormatSetAlign($hFormat,$iFlag)

Funkcja ustala sposób wyrównywania tekstu w okienku tekstowym. Zwraca TRUE gdy sukces, lub FALSE gdy wystąpił błąd.

$hFormat - uchwyt do formatu zwrócony przez _GDIPlus_StringFormatCreate

$iFlag - sposób wyrównania"

0 - do lewej
1 - centrowanie
2 - do prawej


_GDIPlus_RectFCreate

[edytuj]
#include <GDIPlus.au3>
_GDIPlus_RectFCreate([$nX = 0 [, $nY = 0 [, $nWidth = 0 [, $nHeight = 0]]]])

Funkcja tworzy i zwraca strukturę ($tagGDIPRECTF) zawierającą dane o położeniu i wielkości prostokątnego obszaru. Struktura ta jest wykorzystywana przez funkcję _GDIPlus_GraphicsDrawStringEx.

$nX i $nY - współrzędne lewego górnego narożnika

$nWidth i $nHeight - długość i szerokość obszaru, domyślne wartości określają, że polem jest cały obszar grafiki


_GDIPlus_GraphicsMeasureString

[edytuj]
#include <GDIPlus.au3>
_GDIPlus_GraphicsMeasureString($hGraphics, $sString, $hFont, $tLayout, $hFormat)

Funkcja mierzy rozmiaru łańcucha znaków. Zwraca jednowymiarową tablicę z danymi o wielkości łańcucha, lub 0 gdy wystąpił błąd.

 [0] - struktura $tagGDIPRECTF
 [1] - liczba znaków, które rzeczywiście mieszczą się w zadeklarowanym obszarze
 [2] - liczba wierszy, które rzeczywiście mieszczą się w zadeklarowanym obszarze

Struktura $tagGDIPRECTF, zawiera dane o rzeczywistym prostokątnym obszarze, w którym mieści się tekst.

$hGraphics - uchwyt do obiektu zwracany przez _GDIPlus_GraphicsCreateFromHWND lub _GDIPlus_GraphicsCreateFromHWDC

$sString - tekst do wpisania

$hFont - uchwyt do fontu zwracany przez _GDIPlus_FontCreate

$tLayout - struktura $tagGDIPRECTF z zadeklarowanym obszarem do wpisania tekstu, zwracana przez _GDIPlus_RectFCreate

$hFormat - uchwyt do formatu stringu, zwracany przez _GDIPlus_StringFormatCreate

Przykład:

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

$sString = "Witajcie_przyjaciele!"

;tworzenie GUI
$hGUI = GUICreate("GDI+", 200, 500)
GUISetState()

;tworzenie zasobów
_GDIPlus_Startup()
$hGraphic = _GDIPlus_GraphicsCreateFromHWND($hGUI)
$hBrush = _GDIPlus_BrushCreateSolid(0xFF00007F)
$hFormat = _GDIPlus_StringFormatCreate()
$hFamily = _GDIPlus_FontFamilyCreate("Arial")
$hFont = _GDIPlus_FontCreate($hFamily, 32, 2)
$tLayout = _GDIPlus_RectFCreate(10, 50, 100, 200)
$tLayout = _GDIPlus_RectFCreate(10, 150, 100, 200)

;odczyt danych o rzeczywistym obszarze zawierającym tekst
$aInfo = _GDIPlus_GraphicsMeasureString($hGraphic, $sString, $hFont, $tLayout, $hFormat)
MsgBox(0,"","Rzeczywista szerokość pola - " & DllStructGetData ($aInfo[0], 3) _
                                       & @LF & "Ilość znaków  - " & $aInfo[1] _
				       & @LF & "Ilość wierszy - " & $aInfo[2])

;wpisanie tekstu
_GDIPlus_GraphicsDrawStringEx($hGraphic, $sString, $hFont, $aInfo[0], $hFormat, $hBrush)

Do
Until GUIGetMsg() = $GUI_EVENT_CLOSE

;zwolnienie zasobów
_GDIPlus_FontDispose($hFont)
_GDIPlus_FontFamilyDispose($hFamily)
_GDIPlus_StringFormatDispose($hFormat)
_GDIPlus_BrushDispose($hBrush)
_GDIPlus_GraphicsDispose($hGraphic)
_GDIPlus_Shutdown()


Ścieżki (GraphicsPath)

[edytuj]

Ścieżki są obiektami łączącymi w jedną całość inne proste obiekty graficzna (linie, figury geometryczne, teksty, itp.). Tak utworzony obiektem można następnie manipulować jako całością, co znacznie upraszcza wykonywanie różnych operacji graficznych (przesuwanie, skalowanie, obracanie, itp.).


_GDIPlus_PathCreate

[edytuj]
#include <GDIPlus.au3>
_GDIPlus_PathCreate ( [$iFillMode = 0] )

Funkcja tworzy tworzy obiekt GraphicsPath (pusty) i inicjuje tryb wypełnienia. Zwraca uchwyt do obiektu, lub 0 gdy wystąpił błąd.

$iFillMode - tryb wypełniania wnętrza figur

UWAGA: Niepotrzebny już obiekt należy usunąć celem zwolnienia zasobów, wywołując funkcję _GDIPlus_PathDispose.


_GDIPlus_PathCreate2

[edytuj]
#include <GDIPlus.au3>
_GDIPlus_PathCreate2 ( $aPathData [, $iFillMode = 0] )

Funkcja tworzy obiekt GraphicsPath oparty na tablicy punktów i inicjuje tryb wypełnienia. Zwraca uchwyt do obiektu, lub 0 gdy wystąpił błąd.

$aPathData - 2-wymiarowa tablica zawierająca dane punktów i ich typ

[0][0] - ilość punktów i typów (n)
[1][0] - punkt 1, pozycja X
[1][1] - punkt 1, pozycja Y
[1][2] - punkt 1, typu...
 ....     
[n][0] - punkt n, pozycja X
[n][1] - punkt n, Pozycja Y
[n][2] - punkt, typu...

Każdy punkt jest jednego z następujących typów:

0x00 - punkt jest początkiem rysunku
0x01 - jeden z dwóch końców linii
0x03 - punkt końcowy lub kontrolny krzywej Baziera
0x20 - marker
0x80 - ostatni punkt w zamkniętej podścieżce (rysunek)

$iFillMode - tryb wypełniania wnętrza figur

UWAGA: Niepotrzebny już obiekt należy usunąć celem zwolnienia zasobów, wywołując funkcję _GDIPlus_PathDispose.

Przykład:

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

$hGUI = GUICreate("_GDIPlus_PathCreate2", 420, 420)
GUISetState(@SW_SHOW)

_GDIPlus_Startup()
$hGraphics = _GDIPlus_GraphicsCreateFromHWND($hGUI)
_GDIPlus_GraphicsClear($hGraphics, 0xFF000000)

;dane ścieżki
Dim $aPathData[][] = [[5, 0, 0],[80, 200, 1],[160, 300, 1],[320, 10, 1],[160, 400, 1],[80, 200, 1]]

;tworzenie ścieżki i zasobów
$hPath = _GDIPlus_PathCreate2($aPathData)
$hBrush = _GDIPlus_BrushCreateSolid(0x7F0088AA)
$hPen = _GDIPlus_PenCreate(0xFF0088AA, 2)

;rysowanie ścieżki
_GDIPlus_GraphicsFillPath($hGraphics, $hPath, $hBrush)
_GDIPlus_GraphicsDrawPath($hGraphics, $hPath, $hPen)

Do
Until GUIGetMsg() = $GUI_EVENT_CLOSE

;zwolnienie zasobów
_GDIPlus_BrushDispose($hBrush)
_GDIPlus_PenDispose($hPen)
_GDIPlus_PathDispose($hPath)
_GDIPlus_GraphicsDispose($hGraphics)
_GDIPlus_Shutdown()


_GDIPlus_PathDispose

[edytuj]
#include <GDIPlus.au3>
_GDIPlus_PathDispose ( $hPath )

Funkcja likwiduje obiekt GraphicsPath i zwalnia zasoby. Zwraca True gdy sukces, lub False gdy wystąpił błąd.

$hPath - uchwyt obiektu GraphicsPath


_GDIPlus_PathAddArc

[edytuj]
#include <GDIPlus.au3>
_GDIPlus_PathAddArc ( $hPath, $nX, $nY, $nWidth, $nHeight, $fStartAngle, $fSweepAngle )

Funkcja dodaje łuk elipsy do określonej ścieżki graficznej. Zwraca True gdy sukces, lub False gdy wystąpił błąd.

$hPath - uchwyt do ścieżki

$nX i $nY - współrzędna lewego górnego rogu prostokąta mieszczącego elipsę

$nWidth i $nHeight - szerokość i wysokość prostokąta mieszczącego elipsę

$fStartAngle - kąt w stopniach, między osią X i promieniem początkowym łuku

$fSweepAngle - kąt w stopniach, między promieniem początkowym i końcowym łuku

Przykład:

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

;tworzenie GUI
$hGUI = GUICreate("_GDIPlus_PathAddArc", 400, 300)
GUISetState(@SW_SHOW)
_GDIPlus_Startup()

;tworzenie obiektu graficznego i zasobów
$hGraphic = _GDIPlus_GraphicsCreateFromHWND($hGUI)
_GDIPlus_GraphicsClear($hGraphic, 0xFF000000)
$hPen = _GDIPlus_PenCreate(0xFFFF0000, 2)
$hBrush = _GDIPlus_BrushCreateSolid(0x70FF0000)

;tworzenie i definiowanie ścieżki
$hPath = _GDIPlus_PathCreate()
_GDIPlus_PathAddArc($hPath, 50, 50, 300, 100, 90, 180)
_GDIPlus_PathAddArc($hPath, 50, 150, 300, 100, 90, -180)

_GDIPlus_GraphicsDrawPath($hGraphic, $hPath, $hPen) ;rysowanie ścieżki
Sleep(3000)
_GDIPlus_GraphicsFillPath($hGraphic, $hPath, $hBrush) ;wypełnienie ścieżki

Do
Until GUIGetMsg() = $GUI_EVENT_CLOSE

;zwolnienie zasobów
_GDIPlus_PathDispose($hPath)
_GDIPlus_BrushDispose($hBrush)
_GDIPlus_PenDispose($hPen)
_GDIPlus_GraphicsDispose($hGraphic)
_GDIPlus_Shutdown()


_GDIPlus_PathAddBezier

[edytuj]
#include <GDIPlus.au3>
_GDIPlus_PathAddBezier ( $hPath, $nX1, $nY1, $nX2, $nY2, $nX3, $nY3, $nX4, $nY4 )

Funkcja dodaje krzywą Beziera do określonej ścieżki graficznej. Zwraca True gdy sukces, lub False gdy wystąpił błąd.

$hPath - uchwyt do ścieżki

$nX1 i $nY1 - współrzędne punktu początkowego

$nX2 i $nY2 - współrzędne pierwszego punktu kontrolnego

$nX3 i $nY3 - współrzędne drugiego punktu kontrolnego

$nX4 i $nY4 - współrzędne punktu końcowego

Przykład:

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

;tworzenie GUI
$hGUI = GUICreate("_GDIPlus_PathAddBezier", 400, 300)
GUISetState(@SW_SHOW)
_GDIPlus_Startup()

;tworzenie obiektu graficznego i zasobów
$hGraphic = _GDIPlus_GraphicsCreateFromHWND($hGUI)
_GDIPlus_GraphicsClear($hGraphic, 0xFF000000)
$hPen = _GDIPlus_PenCreate(0xFFFF0000, 2)
$hBrush = _GDIPlus_BrushCreateSolid(0x70FF0000)

;tworzenie i definiowanie ścieżki
$hPath = _GDIPlus_PathCreate()
_GDIPlus_PathAddBezier($hPath, 10, 10, 50, 200, 300, 10, 390, 290)

_GDIPlus_GraphicsDrawPath($hGraphic, $hPath, $hPen) ;rysowanie ścieżki
Sleep(3000)
_GDIPlus_GraphicsFillPath($hGraphic, $hPath, $hBrush) ;wypełnienie ścieżki

Do
Until GUIGetMsg() = $GUI_EVENT_CLOSE

;zwolnienie zasobów
_GDIPlus_PathDispose($hPath)
_GDIPlus_BrushDispose($hBrush)
_GDIPlus_PenDispose($hPen)
_GDIPlus_GraphicsDispose($hGraphic)
_GDIPlus_Shutdown()


_GDIPlus_PathAddClosedCurve

[edytuj]
#include <GDIPlus.au3>
_GDIPlus_PathAddClosedCurve ( $hPath, $aPoints )

Funkcja dodaje zamkniętą krzywą do określonej ścieżki graficznej. Zwraca True gdy sukces, lub False gdy wystąpił błąd.

$hPath - uchwyt do ścieżki

$aPoints - 2-wymiarowa tablica zawierająca współrzędne punktów:

[0][0] - ilość punktów (n)
[1][0] - punkt 1, pozycja X
[1][1] - punkt 1, pozycja Y
  ....     
[n][0] - punkt n, pozycja X
[n][1] - punkt n, Pozycja Y

Przykład:

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

;tworzenie GUI
$hGUI = GUICreate("_GDIPlus_PathAddClosedCurve", 400, 300)
GUISetState(@SW_SHOW)
_GDIPlus_Startup()

;tworzenie obiektu graficznego i zasobów
$hGraphic = _GDIPlus_GraphicsCreateFromHWND($hGUI)
_GDIPlus_GraphicsClear($hGraphic, 0xFF000000)
$hPen = _GDIPlus_PenCreate(0xFFFF0000, 2)
$hBrush = _GDIPlus_BrushCreateSolid(0x70FF0000)

;tworzenie i definiowanie ścieżki
$hPath = _GDIPlus_PathCreate()
Local $aPoints[][] = [[4,0],[20,100],[120,80],[220,220],[380,180]]
_GDIPlus_PathAddClosedCurve($hPath, $aPoints)

;rysowanie ścieżki
_GDIPlus_GraphicsDrawPath($hGraphic, $hPath, $hPen) ;rysowanie ścieżki
Sleep(3000)
_GDIPlus_GraphicsFillPath($hGraphic, $hPath, $hBrush) ;wypełnienie ścieżki

Do
Until GUIGetMsg() = $GUI_EVENT_CLOSE

;zwolnienie zasobów
_GDIPlus_PathDispose($hPath)
_GDIPlus_BrushDispose($hBrush)
_GDIPlus_PenDispose($hPen)
_GDIPlus_GraphicsDispose($hGraphic)
_GDIPlus_Shutdown()


_GDIPlus_PathAddClosedCurve2

[edytuj]
#include <GDIPlus.au3>
_GDIPlus_PathAddClosedCurve2 ( $hPath, $aPoints [, $fTension = 0.5] )

Funkcja dodaje zamkniętą krzywą do określonej ścieżki graficznej. Zwraca True gdy sukces, lub False gdy wystąpił błąd.

$hPath - uchwyt do ścieżki

$aPoints - 2-wymiarowa tablica zawierająca współrzędne punktów:

[0][0] - ilość punktów (n)
[1][0] - punkt 1, pozycja X
[1][1] - punkt 1, pozycja Y
  ....     
[n][0] - punkt n, pozycja X
[n][1] - punkt n, Pozycja Y

$fTension - liczba kontrolująca wygięcie krzywej, 0 - linia łamana

Przykład:

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

;tworzenie GUI
$hGUI = GUICreate("_PathAddClosedCurve2", 400, 300)
GUISetState(@SW_SHOW)
_GDIPlus_Startup()

;tworzenie obiektu graficznego i zasobów
$hGraphic = _GDIPlus_GraphicsCreateFromHWND($hGUI)
_GDIPlus_GraphicsClear($hGraphic, 0xFF000000)
Local $aPoints[][] = [[4,0],[20,150],[120,60],[220,220],[380,180]]

;tworzenie i rysowanie ścieżki
$hPen = _GDIPlus_PenCreate(0xFFFFFFFF, 2)
$hPath = _GDIPlus_PathCreate()
_GDIPlus_PathAddClosedCurve2($hPath, $aPoints, 0)
_GDIPlus_GraphicsDrawPath($hGraphic, $hPath, $hPen) ;rysowanie ścieżki
Sleep(2000)
$hPen = _GDIPlus_PenCreate(0xFFFFFF00, 2)
$hPath = _GDIPlus_PathCreate()
_GDIPlus_PathAddClosedCurve2($hPath, $aPoints)
_GDIPlus_GraphicsDrawPath($hGraphic, $hPath, $hPen) ;rysowanie ścieżki
Sleep(2000)
$hPen = _GDIPlus_PenCreate(0xFFFF0000, 2)
$hPath = _GDIPlus_PathCreate()
_GDIPlus_PathAddClosedCurve2($hPath, $aPoints,2)
_GDIPlus_GraphicsDrawPath($hGraphic, $hPath, $hPen) ;rysowanie ścieżki

Do
Until GUIGetMsg() = $GUI_EVENT_CLOSE

;zwolnienie zasobów
_GDIPlus_PathDispose($hPath)
_GDIPlus_PenDispose($hPen)
_GDIPlus_GraphicsDispose($hGraphic)
_GDIPlus_Shutdown()


_GDIPlus_PathAddCurve

[edytuj]
#include <GDIPlus.au3>
_GDIPlus_PathAddCurve ( $hPath, $aPoints )

Funkcja dodaje krzywą do określonej ścieżki graficznej. Zwraca True gdy sukces, lub False gdy wystąpił błąd.

$hPath - uchwyt do ścieżki

$aPoints - 2-wymiarowa tablica zawierająca współrzędne punktów:

[0][0] - ilość punktów (n)
[1][0] - punkt 1, pozycja X
[1][1] - punkt 1, pozycja Y
  ....     
[n][0] - punkt n, pozycja X
[n][1] - punkt n, Pozycja Y

Przykład:

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

;tworzenie GUI
$hGUI = GUICreate("_GDIPlus_PathAddCurve", 400, 300)
GUISetState(@SW_SHOW)
_GDIPlus_Startup()

;tworzenie obiektu graficznego i zasobów
$hGraphic = _GDIPlus_GraphicsCreateFromHWND($hGUI)
_GDIPlus_GraphicsClear($hGraphic, 0xFF000000)
$hPen = _GDIPlus_PenCreate(0xFFFF0000, 2)
$hBrush = _GDIPlus_BrushCreateSolid(0x70FF0000)

;tworzenie i definiowanie ścieżki
$hPath = _GDIPlus_PathCreate()
Local $aPoints[][] = [[4,0],[20,100],[120,80],[220,220],[380,180]]
_GDIPlus_PathAddCurve($hPath, $aPoints)

;rysowanie ścieżki
_GDIPlus_GraphicsDrawPath($hGraphic, $hPath, $hPen) ;rysowanie ścieżki
Sleep(3000)
_GDIPlus_GraphicsFillPath($hGraphic, $hPath, $hBrush) ;wypełnienie ścieżki

Do
Until GUIGetMsg() = $GUI_EVENT_CLOSE

;zwolnienie zasobów
_GDIPlus_PathDispose($hPath)
_GDIPlus_BrushDispose($hBrush)
_GDIPlus_PenDispose($hPen)
_GDIPlus_GraphicsDispose($hGraphic)
_GDIPlus_Shutdown()


_GDIPlus_PathAddCurve2

[edytuj]
#include <GDIPlus.au3>
_GDIPlus_PathAddCurve2 ( $hPath, $aPoints [, $fTension = 0] )

Funkcja dodaje krzywą do określonej ścieżki graficznej. Zwraca True gdy sukces, lub False gdy wystąpił błąd.

$hPath - uchwyt do ścieżki

$aPoints - 2-wymiarowa tablica zawierająca współrzędne punktów:

[0][0] - ilość punktów (n)
[1][0] - punkt 1, pozycja X
[1][1] - punkt 1, pozycja Y
  ....     
[n][0] - punkt n, pozycja X
[n][1] - punkt n, Pozycja Y

$fTension - liczba kontrolująca wygięcie krzywej, 0 - linia łamana

Przykład:

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

;tworzenie GUI
$hGUI = GUICreate("_PathAddCurve2", 400, 300)
GUISetState(@SW_SHOW)
_GDIPlus_Startup()

;tworzenie obiektu graficznego i zasobów
$hGraphic = _GDIPlus_GraphicsCreateFromHWND($hGUI)
_GDIPlus_GraphicsClear($hGraphic, 0xFF000000)
Local $aPoints[][] = [[4,0],[20,150],[120,60],[220,220],[380,180]]

;tworzenie i rysowanie ścieżki
$hPen = _GDIPlus_PenCreate(0xFFFFFFFF, 2)
$hPath = _GDIPlus_PathCreate()
_GDIPlus_PathAddCurve2($hPath, $aPoints, 0)
_GDIPlus_GraphicsDrawPath($hGraphic, $hPath, $hPen) ;rysowanie ścieżki
Sleep(2000)
$hPen = _GDIPlus_PenCreate(0xFFFFFF00, 2)
$hPath = _GDIPlus_PathCreate()
_GDIPlus_PathAddCurve2($hPath, $aPoints)
_GDIPlus_GraphicsDrawPath($hGraphic, $hPath, $hPen) ;rysowanie ścieżki
Sleep(2000)
$hPen = _GDIPlus_PenCreate(0xFFFF0000, 2)
$hPath = _GDIPlus_PathCreate()
_GDIPlus_PathAddCurve2($hPath, $aPoints,2)
_GDIPlus_GraphicsDrawPath($hGraphic, $hPath, $hPen) ;rysowanie ścieżki

Do
Until GUIGetMsg() = $GUI_EVENT_CLOSE

;zwolnienie zasobów
_GDIPlus_PathDispose($hPath)
_GDIPlus_PenDispose($hPen)
_GDIPlus_GraphicsDispose($hGraphic)
_GDIPlus_Shutdown()


_GDIPlus_PathAddCurve3

[edytuj]
#include <GDIPlus.au3>
_GDIPlus_PathAddCurve3 ( $hPath, $aPoints, $iOffset, $iNumOfSegments [, $fTension = 0.5] )

Funkcja dodaje krzywą do określonej ścieżki graficznej. Zwraca True gdy sukces, lub False gdy wystąpił błąd.

$hPath - uchwyt do ścieżki

$aPoints - 2-wymiarowa tablica zawierająca współrzędne punktów:

[0][0] - ilość punktów i typów
[1][0] - punkt 1, pozycja X
[1][1] - punkt 1, pozycja Y
  ....     
[n][0] - punkt n, pozycja X
[n][1] - punkt n, Pozycja Y

$iOffset - indeks elementu tablicy, który jest używany jako pierwszy punkt krzywej

$iNumOfSegments - liczba segmentów krzywej, segmentem jest krzywa, która łączy kolejne punkty w tablicy

$fTension - liczba kontrolująca wygięcie krzywej, 0 - linia łamana

Przykład:

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

;tworzenie GUI
$hGUI = GUICreate("_PathAddCurve3", 400, 300)
GUISetState(@SW_SHOW)
_GDIPlus_Startup()

;tworzenie obiektu graficznego i zasobów
$hGraphic = _GDIPlus_GraphicsCreateFromHWND($hGUI)
_GDIPlus_GraphicsClear($hGraphic, 0xFF000000)
Local $aPoints[][] = [[4,0],[20,150],[120,60],[220,220],[380,180]]

;tworzenie i rysowanie ścieżki
$hPen = _GDIPlus_PenCreate(0xFFFFFFFF, 2)
$hPath = _GDIPlus_PathCreate()
_GDIPlus_PathAddCurve3($hPath, $aPoints, 0, 1)
_GDIPlus_GraphicsDrawPath($hGraphic, $hPath, $hPen) ;rysowanie ścieżki
Sleep(2000)
$hPen = _GDIPlus_PenCreate(0xFF0000FF, 2)
$hPath = _GDIPlus_PathCreate()
_GDIPlus_PathAddCurve3($hPath, $aPoints, 1,1)
_GDIPlus_GraphicsDrawPath($hGraphic, $hPath, $hPen) ;rysowanie ścieżki
Sleep(2000)
$hPen = _GDIPlus_PenCreate(0xFFFF0000, 2)
$hPath = _GDIPlus_PathCreate()
_GDIPlus_PathAddCurve3($hPath, $aPoints,2,1)
_GDIPlus_GraphicsDrawPath($hGraphic, $hPath, $hPen) ;rysowanie ścieżki

Do
Until GUIGetMsg() = $GUI_EVENT_CLOSE

;zwolnienie zasobów
_GDIPlus_PathDispose($hPath)
_GDIPlus_PenDispose($hPen)
_GDIPlus_GraphicsDispose($hGraphic)
_GDIPlus_Shutdown()


_GDIPlus_PathAddEllipse

[edytuj]
#include <GDIPlus.au3>
_GDIPlus_PathAddEllipse ( $hPath, $nX, $nY, $nWidth, $nHeight )

Funkcja dodaje elipsę do określonej ścieżki graficznej. Zwraca True gdy sukces, lub False gdy wystąpił błąd.

$hPath - uchwyt do ścieżki

$nX i $nY - współrzędna lewego górnego rogu prostokąta mieszczącego elipsę

$nWidth i $nHeight - szerokość i wysokość prostokąta mieszczącego elipsę

Przykład:

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

;tworzenie GUI
$hGUI = GUICreate("_GDIPlus_PathAddEllipse", 280, 190)
GUISetState(@SW_SHOW)
_GDIPlus_Startup()

;tworzenie obiektu graficznego i zasobów
$hGraphic = _GDIPlus_GraphicsCreateFromHWND($hGUI)
_GDIPlus_GraphicsClear($hGraphic, 0xFF000000)
$hPen = _GDIPlus_PenCreate(0xFFFFFFFF, 2)
$hPath = _GDIPlus_PathCreate()

;tworzenie i rysowanie ścieżki
_GDIPlus_PathAddEllipse($hPath, 10,10, 100, 100)
_GDIPlus_PathAddEllipse($hPath, 90,10, 100, 100)
_GDIPlus_PathAddEllipse($hPath, 170,10, 100, 100)
_GDIPlus_PathAddEllipse($hPath, 50,80, 100, 100)
_GDIPlus_PathAddEllipse($hPath, 130,80, 100, 100)
_GDIPlus_GraphicsDrawPath($hGraphic, $hPath, $hPen)

Do
Until GUIGetMsg() = $GUI_EVENT_CLOSE

;zwolnienie zasobów
_GDIPlus_PathDispose($hPath)
_GDIPlus_PenDispose($hPen)
_GDIPlus_GraphicsDispose($hGraphic)
_GDIPlus_Shutdown()


_GDIPlus_PathAddLine

[edytuj]
#include <GDIPlus.au3>
_GDIPlus_PathAddLine ( $hPath, $nX1, $nY1, $nX2, $nY2 )

Funkcja dodaje odcinek linii prostej do określonej ścieżki graficznej. Zwraca True gdy sukces, lub False gdy wystąpił błąd.

$hPath - uchwyt do ścieżki

$nX1 i $nY1 - współrzędna początku odcinka

$nX2 i $nY2 - współrzędna końca odcinka

Przykład:

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

;tworzenie GUI
$hGUI = GUICreate("_GDIPlus_PathAddLine", 400, 400)
GUISetState(@SW_SHOW)
_GDIPlus_Startup()

;tworzenie obiektu graficznego i zasobów
$hGraphic = _GDIPlus_GraphicsCreateFromHWND($hGUI)
_GDIPlus_GraphicsClear($hGraphic, 0xFF000000)
$hPen = _GDIPlus_PenCreate(0xFFFFFFFF, 2)
$hBrush = _GDIPlus_BrushCreateSolid(0x70FF0000)

;tworzenie i rysowanie ścieżki
$hPath = _GDIPlus_PathCreate()
_GDIPlus_PathAddLine($hPath, 106, 330, 200, 40)
_GDIPlus_PathAddLine($hPath, 294, 330, 48, 151)
_GDIPlus_PathAddLine($hPath, 352, 151, 106, 330)
_GDIPlus_GraphicsDrawPath($hGraphic, $hPath, $hPen)
Sleep(3000)
_GDIPlus_GraphicsFillPath($hGraphic, $hPath, $hBrush)

Do
Until GUIGetMsg() = $GUI_EVENT_CLOSE

;zwolnienie zasobów
_GDIPlus_PathDispose($hPath)
_GDIPlus_BrushDispose($hBrush)
_GDIPlus_PenDispose($hPen)
_GDIPlus_GraphicsDispose($hGraphic)
_GDIPlus_Shutdown()


_GDIPlus_PathAddLine2

[edytuj]
#include <GDIPlus.au3>
_GDIPlus_PathAddLine2 ( $hPath, $aPoints )

Funkcja w oparciu o tablicę punktów, dodaje odcinki do określonej ścieżki graficznej. Zwraca True gdy sukces, lub False gdy wystąpił błąd.

$hPath - uchwyt do ścieżki

$aPoints - 2-wymiarowa tablica zawierająca współrzędne punktów:

[0][0] - ilość punktów
[1][0] - punkt 1, pozycja X
[1][1] - punkt 1, pozycja Y
  ....     
[n][0] - punkt n, pozycja X
[n][1] - punkt n, Pozycja Y

Przykład:

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

;tworzenie GUI
$hGUI = GUICreate("_GDIPlus_PathAddLine2", 400, 400)
GUISetState(@SW_SHOW)
_GDIPlus_Startup()

;tworzenie obiektu graficznego i zasobów
$hGraphic = _GDIPlus_GraphicsCreateFromHWND($hGUI)
_GDIPlus_GraphicsClear($hGraphic, 0xFF000000)
$hPen = _GDIPlus_PenCreate(0xFFFFFFFF, 2)
$hBrush = _GDIPlus_BrushCreateSolid(0x70FF0000)

;tworzenie i rysowanie ścieżki
$hPath = _GDIPlus_PathCreate()
Local $avPoints[][] = [[5],[100, 50],[300, 50],[100, 350],[300,350],[100,50]]
_GDIPlus_PathAddLine2($hPath, $avPoints)
_GDIPlus_GraphicsDrawPath($hGraphic, $hPath, $hPen)
Sleep(3000)
_GDIPlus_GraphicsFillPath($hGraphic, $hPath, $hBrush)

Do
Until GUIGetMsg() = $GUI_EVENT_CLOSE

;zwolnienie zasobów
_GDIPlus_PathDispose($hPath)
_GDIPlus_PenDispose($hPen)
_GDIPlus_BrushDispose($hBrush)
_GDIPlus_GraphicsDispose($hGraphic)
_GDIPlus_Shutdown()


_GDIPlus_PathAddPath

[edytuj]
#include <GDIPlus.au3>
_GDIPlus_PathAddPath ( $hPath1, $hPath2 [, $bConnect = True] )

Funkcja łączy dwie ścieżki graficzne. Zwraca True gdy sukces, lub False gdy wystąpił błąd.

$hPath1 - uchwyt ścieżki, do której będzie dołączona druga ścieżka

$hPath2 - uchwyt do dołączanej ścieżki

Przykład:

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

;tworzenie GUI
$hGUI = GUICreate("_GDIPlus_PathAddLine2", 400, 400)
GUISetState(@SW_SHOW)
_GDIPlus_Startup()

;tworzenie obiektu graficznego i zasobów
$hGraphic = _GDIPlus_GraphicsCreateFromHWND($hGUI)
_GDIPlus_GraphicsClear($hGraphic, 0xFF000000)
$hPen = _GDIPlus_PenCreate(0xFFFFFFFF, 2)
$hBrush = _GDIPlus_BrushCreateSolid(0x70FF0000)

;tworzenie ścieżki 1
$hPath1 = _GDIPlus_PathCreate()
Local $avPoints[][] = [[5],[100, 50],[300, 50],[100, 350],[300,350],[100,50]]
_GDIPlus_PathAddLine2($hPath1, $avPoints)

;tworzenie ścieżki 2
$hPath2 = _GDIPlus_PathCreate()
_GDIPlus_PathAddEllipse($hPath2, 100,150, 200, 100)

_GDIPlus_PathAddPath($hPath1, $hPath2) ;łączenie ścieżek

_GDIPlus_GraphicsDrawPath($hGraphic, $hPath1, $hPen)
Sleep(3000)
_GDIPlus_GraphicsFillPath($hGraphic, $hPath1, $hBrush)

Do
Until GUIGetMsg() = $GUI_EVENT_CLOSE

;zwolnienie zasobów
_GDIPlus_PathDispose($hPath1)
_GDIPlus_PathDispose($hPath2)
_GDIPlus_PenDispose($hPen)
_GDIPlus_BrushDispose($hBrush)
_GDIPlus_GraphicsDispose($hGraphic)
_GDIPlus_Shutdown()


_GDIPlus_PathAddPie

[edytuj]
#include <GDIPlus.au3>
_GDIPlus_PathAddPie ( $hPath, $nX, $nY, $nWidth, $nHeight, $fStartAngle, $fSweepAngle )

Funkcja dodaje wycinek elipsy do określonej ścieżki graficznej. Zwraca True gdy sukces, lub False gdy wystąpił błąd.

$hPath - uchwyt do ścieżki

$nX i $nY - współrzędna lewego górnego rogu prostokąta mieszczącego elipsę

$nWidth i $nHeight - szerokość i wysokość prostokąta mieszczącego elipsę

$fStartAngle - kąt w stopniach, między osią X i promieniem początkowym łuku

$fSweepAngle - kąt w stopniach, między promieniem początkowym i końcowym łuku

Przykład:

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

;tworzenie GUI
$hGUI = GUICreate("_GDIPlus_PathAddPie", 400, 400)
GUISetState()

_GDIPlus_Startup()
$hGraphic = _GDIPlus_GraphicsCreateFromHWND($hGUI)
_GDIPlus_GraphicsClear($hGraphic, 0)

;tworzenie zasobów
$hBrush = _GDIPlus_BrushCreateSolid(0x8F8800AA)
$hPen = _GDIPlus_PenCreate(0xFFFF00AA, 2)

$hPath = _GDIPlus_PathCreate()                         ;tworzenie ścieżki
_GDIPlus_PathAddPie($hPath, 50, 50, 300, 300, 135, 270);dodanie wycinka
_GDIPlus_PathAddPie($hPath, 50, 80, 300, 300, 45, 90)  ;dodanie drugiego wycinka
_GDIPlus_GraphicsFillPath($hGraphic, $hPath, $hBrush)  ;inicjowanie zamalowania obszaru
_GDIPlus_GraphicsDrawPath($hGraphic, $hPath, $hPen)    ;rysowanie ścieżki

Do
Until GUIGetMsg() = $GUI_EVENT_CLOSE

;zwolnienie zasobów
_GDIPlus_PathDispose($hPath)
_GDIPlus_BrushDispose($hBrush)
_GDIPlus_PenDispose($hPen)
_GDIPlus_GraphicsDispose($hGraphic)
_GDIPlus_Shutdown()


_GDIPlus_PathAddPolygon

[edytuj]
#include <GDIPlus.au3>
_GDIPlus_PathAddPolygon ( $hPath, $aPoints )

Funkcja dodaje wielokąt do określonej ścieżki graficznej. Zwraca True gdy sukces, lub False gdy wystąpił błąd.

$hPath - uchwyt do ścieżki

$aPoints - tablica z współrzędnymi wierzchołków wielokąta:

[0][0] - ilość punktów (n)
[1][0] - punkt 1, pozycja X
[1][1] - punkt 1, pozycja Y
  ....     
[n][0] - punkt n, pozycja X
[n][1] - punkt n, Pozycja Y

Przykład:

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

;tworzenie GUI
$hGUI = GUICreate("_GDIPlus_PathAddPolygon", 400, 400)
GUISetState()

_GDIPlus_Startup()
$hGraphic = _GDIPlus_GraphicsCreateFromHWND($hGUI)
_GDIPlus_GraphicsClear($hGraphic, 0)

;tworzenie zasobów
$hPen = _GDIPlus_PenCreate(0xFFFF0000, 2)

$hPath = _GDIPlus_PathCreate() ;tworzenie ścieżki

;tworzenie tablic z współrzędnymi wierzchołków wielokątów
Local $aPoints1[][] = [[5,0],[20,100],[120,80],[220,20],[380,180],[200,360]]
Local $aPoints2[][] = [[3,0],[120,150],[200,80],[220,220]]

;dodawanie wielokątó do ścieżki
_GDIPlus_PathAddPolygon ( $hPath, $aPoints1 )
_GDIPlus_PathAddPolygon ( $hPath, $aPoints2 )

_GDIPlus_GraphicsDrawPath($hGraphic, $hPath, $hPen)  ;rysowanie ścieżki

Do
Until GUIGetMsg() = $GUI_EVENT_CLOSE

;zwolnienie zasobów
_GDIPlus_PathDispose($hPath)
_GDIPlus_PenDispose($hPen)
_GDIPlus_GraphicsDispose($hGraphic)
_GDIPlus_Shutdown()


_GDIPlus_PathAddRectangle

[edytuj]
#include <GDIPlus.au3>
_GDIPlus_PathAddRectangle ( $hPath, $nX, $nY, $nWidth, $nHeight )

Funkcja dodaje prostokąt do określonej ścieżki graficznej. Zwraca True gdy sukces, lub False gdy wystąpił błąd.

$hPath - uchwyt do ścieżki

$nX i $nY - współrzędna lewego górnego rogu prostokąta

$nWidth i $nHeight - szerokość i wysokość prostokąta

Przykład:

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

;tworzenie GUI
$hGUI = GUICreate("_GDIPlus_PathAddRectangle", 400, 340)
GUISetState(@SW_SHOW)
_GDIPlus_Startup()

;tworzenie obiektu graficznego i zasobów
$hGraphic = _GDIPlus_GraphicsCreateFromHWND($hGUI)
_GDIPlus_GraphicsClear($hGraphic, 0xFF000000)
$hPen = _GDIPlus_PenCreate(0xFFFF0000, 2)
$hBrush = _GDIPlus_BrushCreateSolid(0x70FF0000)

;tworzenie i definiowanie ścieżki
$hPath = _GDIPlus_PathCreate()
_GDIPlus_PathAddRectangle($hPath, 50, 140, 300, 50)
_GDIPlus_PathAddRectangle($hPath, 175, 20, 50, 300)

_GDIPlus_GraphicsDrawPath($hGraphic, $hPath, $hPen) ;rysowanie ścieżki
Sleep(3000)
_GDIPlus_GraphicsFillPath($hGraphic, $hPath, $hBrush) ;wypełnienie ścieżki

Do
Until GUIGetMsg() = $GUI_EVENT_CLOSE

;zwolnienie zasobów
_GDIPlus_PathDispose($hPath)
_GDIPlus_BrushDispose($hBrush)
_GDIPlus_PenDispose($hPen)
_GDIPlus_GraphicsDispose($hGraphic)
_GDIPlus_Shutdown()


_GDIPlus_PathAddString

[edytuj]
#include <GDIPlus.au3>
_GDIPlus_PathAddString ( $hPath, $sString, $tLayout, $hFamily [, $iStyle = 0 [, $fSize = 8.5 [, $hFormat = 0]]] )

Funkcja dodaje tekst do określonej ścieżki graficznej. Zwraca True gdy sukces, lub False gdy wystąpił błąd.

$hPath - uchwyt do ścieżki

$sString - tekst

$tLayout - struktura $tagGDIPRECTF z wymiarami i położeniem prostokąta zawierającego tekst

$hFamily - uchwyt do rodziny fontów

$iStyle - styl kroju pisma, może być kombinacją następujących wartości:

0 - normalna waga i styl czcionki (domyślne)
1 - wytłuszczenie
2 - kursywa
4 - podkreślenie
8 - przekreślenie

$fSize - wielkość czcionki w punktach (domyślnie 8.5)

$hFormat - wskaźnik do obiektu StringFormat (domyślnie 0)

Przykład:

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

$hGUI = GUICreate("_GDIPlus_PathAddString", 540, 100)
GUISetState()

_GDIPlus_Startup()
$hGraphic = _GDIPlus_GraphicsCreateFromHWND($hGUI)
$hBrush = _GDIPlus_BrushCreateSolid(0xFFDD2200)
$hPen = _GDIPlus_PenCreate(0xFFFFBB00, 2)

$hFamily = _GDIPlus_FontFamilyCreate("Arial") ;tworzenie rodziny fontów
$tLayout = _GDIPlus_RectFCreate() ;tworzenie prostokąta zawierającego tekst

$hPath = _GDIPlus_PathCreate() ;tworzenie ścieżki
_GDIPlus_PathAddString($hPath, "AutoIt to jest to!", $tLayout, $hFamily, 0, 72)

_GDIPlus_GraphicsClear($hGraphic, 0xFF000000)
_GDIPlus_GraphicsDrawPath($hGraphic, $hPath, $hPen)   ;rysowanie ścieżki
_GDIPlus_GraphicsFillPath($hGraphic, $hPath, $hBrush) ;zamalowanie ścieżki

Do
Until GUIGetMsg() = $GUI_EVENT_CLOSE

;zwolnienie zasobów
_GDIPlus_FontFamilyDispose($hFamily)
_GDIPlus_PathDispose($hPath)
_GDIPlus_PenDispose($hPen)
_GDIPlus_BrushDispose($hBrush)
_GDIPlus_GraphicsDispose($hGraphic)
_GDIPlus_Shutdown()


_GDIPlus_PathCloseFigure

[edytuj]
#include <GDIPlus.au3>
_GDIPlus_PathCloseFigure ( $hPath )

Funkcja łączy elementy ścieżki w zamkniętą figurę. Zwraca True gdy sukces, lub False gdy wystąpił błąd.

$hPath - uchwyt do ścieżki

Łączenie następuje za pomocą odcinków prostej: - dla 1 elementu łączy początek z końcem - dla wielu elementów wg schematu: koniec pierwszego - początek drugiego ... koniec poprzedniego - początek następnego ... koniec ostatniego - początek pierwszego

Przykład:

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

$hGUI = GUICreate("GDI+", 400, 600)
GUISetState()

_GDIPlus_Startup()
$hGraphic = _GDIPlus_GraphicsCreateFromHWND($hGUI)
_GDIPlus_GraphicsSetSmoothingMode($hGraphic, 2)

$hBrush = _GDIPlus_BrushCreateSolid(0xFFFF9900)
$hPen = _GDIPlus_PenCreate(0xFF0000FF, 2)

;tworzenie ścieżki
$hPath = _GDIPlus_PathCreate()
_GDIPlus_PathAddArc($hPath, 150, 150, 100, 100, 160, 220)
_GDIPlus_PathAddArc($hPath, 50, 50, 300, 300, 20, -220)
_GDIPlus_PathCloseFigure($hPath) ;zamknięcie figury

_GDIPlus_PathAddArc($hPath, 150, 450, 100, 100, 160, 220)
_GDIPlus_PathCloseFigure($hPath) ;zamknięcie figury
_GDIPlus_PathAddArc($hPath, 50, 350, 300, 300, 20, -220)
_GDIPlus_PathCloseFigure($hPath) ;zamknięcie figury

_GDIPlus_GraphicsFillPath($hGraphic, $hPath, $hBrush)
_GDIPlus_GraphicsDrawPath($hGraphic, $hPath, $hPen)

Do
Until GUIGetMsg() = $GUI_EVENT_CLOSE

;zwolnienie zasobów
_GDIPlus_PathDispose($hPath)
_GDIPlus_BrushDispose($hBrush)
_GDIPlus_PenDispose($hPen)
_GDIPlus_GraphicsDispose($hGraphic)
_GDIPlus_Shutdown()


_GDIPlus_PathFlatten

[edytuj]
#include <GDIPlus.au3>
_GDIPlus_PathFlatten ( $hPath [, $fFlatness = 0.25 [, $hMatrix = 0]] )

Funkcja zastępuje każdą krzywą w ścieżce linią łamaną. Zwraca True gdy sukces, lub False gdy wystąpił błąd.

$hPath - uchwyt do ścieżki

$fFlatness - liczba rzeczywista określająca maksymalną odchyłkę między ścieżką, a jej przybliżeniem, im wartość mniejsza tym łamana składa się z większej liczby odcinków i przybliżenie jest dokładniejsze (dla wartości 0 transformacja nie jest realizowana)

$hMatrix - uchwyt do obiektu matrix z dodatkową transformację (np. obrót, skalowanie, itp.), 0 oznacza brak transformacji matrix

Przykład:

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

$hGUI = GUICreate("GDI+", 800, 300)
GUISetState()

_GDIPlus_Startup()
$hGraphic = _GDIPlus_GraphicsCreateFromHWND($hGUI)
_GDIPlus_GraphicsSetSmoothingMode($hGraphic, 2) ;włączenie wygładzania krawędzi

$hPen = _GDIPlus_PenCreate(0xFF000000, 2)

;oryginalna ścieżka
_GDIPlus_GraphicsDrawString($hGraphic, "Oryginalna ścieżka", 10, 10)
$hPath = _GDIPlus_PathCreate()
_GDIPlus_PathAddEllipse($hPath, 50, 50, 300, 200)
_GDIPlus_GraphicsDrawPath($hGraphic, $hPath, $hPen)


;ścieżka po transformacji
_GDIPlus_GraphicsDrawString($hGraphic, "Ścieżka po transformacji", 410, 10)
_GDIPlus_PathReset($hPath)
_GDIPlus_PathAddEllipse($hPath, 450, 50, 300, 200)
_GDIPlus_PathFlatten($hPath, 5) ;transformacja ścieżki do łamanej
_GDIPlus_GraphicsDrawPath($hGraphic, $hPath, $hPen)

Do
Until GUIGetMsg() = $GUI_EVENT_CLOSE

;zwolnienie zasobów
_GDIPlus_PathDispose($hPath)
_GDIPlus_PenDispose($hPen)
_GDIPlus_GraphicsDispose($hGraphic)
_GDIPlus_Shutdown()


_GDIPlus_PathGetData

[edytuj]
#include <GDIPlus.au3>
_GDIPlus_PathGetData ( $hPath )

Funkcja zwraca dwuwymiarową tablicę z danymi punktów charakterystycznych ścieżki. Jeżeli wystąpił błąd makro @error przyjmuje wartość różną od zera.

[0][0] - ilość punktów i typów (n)
[1][0] - współrzędna X pierwszego punktu
[1][1] - współrzędna Y pierwszego punktu
[1][2] - typ pierwszego punktu
 ...
[n][0] - współrzędna X ostatniego punktu
[n][1] - współrzędna Y ostatniego punktu
[n][2] - typ ostatniego punktu

Każdy punkt jest jednego z następujących typów:

0x00 - punkt jest początkiem rysunku
0x01 - jeden z dwóch końców linii
0x03 - punkt końcowy lub kontrolny krzywej Baziera
0x20 - marker
0x80 - ostatni punkt w zamkniętej podścieżce (rysunek)

$hPath - uchwyt do ścieżki

Przykład:

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

$hGUI = GUICreate("GDI+", 380, 300)
GUISetState()

_GDIPlus_Startup()
$hGraphic = _GDIPlus_GraphicsCreateFromHWND($hGUI)

$hPen1 = _GDIPlus_PenCreate(0xFFFF0000, 2)
$hPen2 = _GDIPlus_PenCreate(0xFF000000, 1)

$hPath = _GDIPlus_PathCreate()
_GDIPlus_PathAddEllipse($hPath, 50, 50, 280, 180)

;odczyt punktów charakterystycznych ścieżki
$aPath = _GDIPlus_PathGetData($hPath)

;zmiana typu punktów (wszystkie jako końce odcinków)
For $i = 1 To UBound($aPath)-1
	$aPath[$i][2] = 1
Next

;tworzenie ścieżki na podstawie tablicy punktów
$hPath2 = _GDIPlus_PathCreate2($aPath)

;rysowanie oryginalnej ścieżki
_GDIPlus_GraphicsDrawPath($hGraphic, $hPath, $hPen1)

Sleep(2000)

;rysowanie ścieżki ze zmienionym typem punktów
_GDIPlus_GraphicsDrawPath($hGraphic, $hPath2, $hPen2)

Do
Until GUIGetMsg() = $GUI_EVENT_CLOSE

;zwolnienie zasobów
_GDIPlus_PathDispose($hPath)
_GDIPlus_PathDispose($hPath2)
_GDIPlus_PenDispose($hPen1)
_GDIPlus_PenDispose($hPen2)
_GDIPlus_GraphicsDispose($hGraphic)
_GDIPlus_Shutdown()


_GDIPlus_PathGetLastPoint

[edytuj]
#include <GDIPlus.au3>
_GDIPlus_PathGetLastPoint ( $hPath )

Funkcja zwraca w postaci dwuelementowej tablicy, współrzędne końcowego punktu ostatniej figury ścieżki graficznej. Jeżeli wystąpił błąd makro @error przyjmuje wartość różną od zera.

[0] - współrzędna X
[1] - współrzędna Y

$hPath - uchwyt do ścieżki

Przykład:

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

$hGUI = GUICreate("GDI+", 400, 300)
GUISetState()

_GDIPlus_Startup()
$hGraphic = _GDIPlus_GraphicsCreateFromHWND($hGUI)

$hPen = _GDIPlus_PenCreate(0xFF0000FF, 2)

$hPath = _GDIPlus_PathCreate()
_GDIPlus_PathAddArc($hPath, 100, 100, 200, 100, Random(0, 360), Random(30, 270))
_GDIPlus_PathAddArc($hPath, 50, 50, 300, 200, Random(0, 360), Random(30, 270))
_GDIPlus_GraphicsDrawPath($hGraphic, $hPath, $hPen)

_GDIPlus_PenSetColor($hPen, 0xFFFF0000)

$aPnt = _GDIPlus_PathGetLastPoint($hPath)
_GDIPlus_GraphicsDrawEllipse($hGraphic, $aPnt[0]-5, $aPnt[1]-5, 10, 10, $hPen)

Do
Until GUIGetMsg() = $GUI_EVENT_CLOSE

;zwolnienie zasobów
_GDIPlus_PathDispose($hPath)
_GDIPlus_PenDispose($hPen)
_GDIPlus_GraphicsDispose($hGraphic)
_GDIPlus_Shutdown()


_GDIPlus_PathGetPoints

[edytuj]
#include <GDIPlus.au3>
_GDIPlus_PathGetPoints ( $hPath )

Funkcja odczytuje współrzędne punktów ścieżki i zwraca je w postaci dwuwymiarowej tablicy. Jeżeli wystąpił błąd makro @error przyjmuje wartość różną od zera.

[0][0] - ilość punktów (n)
[1][0] - współrzędna X pierwszego punktu
[1][1] - współrzędna Y pierwszego punktu
  ...
[n][0] - współrzędna X ostatniego punktu
[n][1] - współrzędna Y ostatniego punktu

$hPath - uchwyt do ścieżki

Przykład:

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

$hGUI = GUICreate("GDI+", 700, 400)
GUISetState()

_GDIPlus_Startup()
$hGraphic = _GDIPlus_GraphicsCreateFromHWND($hGUI)
_GDIPlus_GraphicsSetSmoothingMode($hGraphic, 2)

;tworzenie piór
$hPen1 = _GDIPlus_PenCreate(0xFF00AA00, 1)
$hPen2 = _GDIPlus_PenCreate(0xFF0000FF, 2)
$hPen3 = _GDIPlus_PenCreate(0xFFFF0000, 1)

;tworzenie ścieżki
$hPath = _GDIPlus_PathCreate()
_GDIPlus_PathAddEllipse($hPath, 50, 50, 600, 300)
_GDIPlus_GraphicsDrawPath($hGraphic, $hPath, $hPen1) ;rysowanie ścieżki (elipsy)

$aPoints = _GDIPlus_PathGetPoints($hPath) ;odczytanie współrzędnych punktów ścieżki

;rysowanie kółek wokół punktów charakterystycznych ścieżki
For $i = 1 To $aPoints[0][0]
   _GDIPlus_GraphicsDrawEllipse($hGraphic, $aPoints[$i][0] - 4, $aPoints[$i][1] - 4, 8, 8, $hPen2)
Next

Sleep(2000)

;rysowanie łamanej łączącej punkty charakterystyczne ścieżki
For $i = 1 To $aPoints[0][0]-1
   _GDIPlus_GraphicsDrawLine($hGraphic, $aPoints[$i][0], $aPoints[$i][1], $aPoints[$i+1][0], $aPoints[$i+1][1], $hPen3)
Next

Do
Until GUIGetMsg() = $GUI_EVENT_CLOSE

;zwolnienie zasobów
_GDIPlus_PathDispose($hPath)
_GDIPlus_PenDispose($hPen1)
_GDIPlus_PenDispose($hPen2)
_GDIPlus_PenDispose($hPen3)
_GDIPlus_GraphicsDispose($hGraphic)
_GDIPlus_Shutdown()


_GDIPlus_PathGetPointCount

[edytuj]
#include <GDIPlus.au3>
_GDIPlus_PathGetPointCount ( $hPath )

Funkcja zwraca ilość punktów charakterystycznych ścieżki, lub 0 gdy wystąpił błąd (makro @error przyjmuje wartość różną od zera).

$hPath - uchwyt do ścieżki

UWAGA: Zwracana wartość jest tym samym co zawartość komórki [0][0] tablicy zwracanej przez funkcję _GDIPlus_PathGetPoint.

Przykład:

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

$hGUI = GUICreate("GDI+", 700, 400)
GUISetState()

_GDIPlus_Startup()
$hGraphic = _GDIPlus_GraphicsCreateFromHWND($hGUI)
_GDIPlus_GraphicsSetSmoothingMode($hGraphic, 2)

;tworzenie piór
$hPen1 = _GDIPlus_PenCreate(0xFF00AA00, 1)
$hPen2 = _GDIPlus_PenCreate(0xFF0000FF, 2)
$hPen3 = _GDIPlus_PenCreate(0xFFFF0000, 1)

;tworzenie ścieżki
$hPath = _GDIPlus_PathCreate()
_GDIPlus_PathAddEllipse($hPath, 50, 50, 600, 300)
_GDIPlus_GraphicsDrawPath($hGraphic, $hPath, $hPen1) ;rysowanie ścieżki (elipsy)

$aPoints = _GDIPlus_PathGetPoints($hPath) ;odczytanie współrzędnych punktów ścieżki

;rysowanie kółek wokół punktów charakterystycznych ścieżki
For $i = 1 To _GDIPlus_PathGetPointCount($hPath)
   _GDIPlus_GraphicsDrawEllipse($hGraphic, $aPoints[$i][0] - 4, $aPoints[$i][1] - 4, 8, 8, $hPen2)
Next

Sleep(2000)

;rysowanie łamanej łączącej punkty charakterystyczne ścieżki
For $i = 1 To _GDIPlus_PathGetPointCount($hPath)-1
   _GDIPlus_GraphicsDrawLine($hGraphic, $aPoints[$i][0], $aPoints[$i][1], $aPoints[$i+1][0], $aPoints[$i+1][1], $hPen3)
Next

Do
Until GUIGetMsg() = $GUI_EVENT_CLOSE

;zwolnienie zasobów
_GDIPlus_PathDispose($hPath)
_GDIPlus_PenDispose($hPen1)
_GDIPlus_PenDispose($hPen2)
_GDIPlus_PenDispose($hPen3)
_GDIPlus_GraphicsDispose($hGraphic)
_GDIPlus_Shutdown()


_GDIPlus_PathGetWorldBounds

[edytuj]
#include <GDIPlus.au3>
_GDIPlus_PathGetWorldBounds ( $hPath [, $hMatrix = 0 [, $hPen = 0]] )

Funkcja zwraca w jednowymiarowej tablicy dane prostokąta, w którym mieści się ścieżka (najmniejszy prostokąt będący obramowaniem ścieżki). Jeżeli wystąpił błąd makro @error przyjmuje wartość różną od zera.

[0] - współrzędna X lewego górnego narożnika prostokąta
[1] - współrzędna Y lewego górnego narożnika prostokąta
[2] - szerokość prostokąta
[3] - wysokość prostokąta

$hPath - uchwyt do ścieżki

$hMatrix - uchwyt do obiektu matrix, przekształcenia ścieżki opisane w tym obiekcie będą tylko uwzględnione w danych zwracanego prostokąta, sama transformacja ścieżki nie będzie realizowana, 0 oznacza zignorowanie parametru

$hPen - uchwyt do pióra, grubość tego pióra będzie uwzględniona w danych zwracanego prostopąta, tak że ścieżka zmieści się w prostokącie nawet wtedy gdy będzie narysowana bardzo grubym piórem, 0 oznacza zignorowanie parametru

Przykład:

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

Local $iW = 800, $iH = 200
$hGUI = GUICreate("GDI+", $iW, $iH)
GUISetState()

_GDIPlus_Startup()
$hGraphic = _GDIPlus_GraphicsCreateFromHWND($hGUI)
_GDIPlus_GraphicsSetSmoothingMode($hGraphic, 2) ;włączenie wygładzania krawędzi

;tworzenie pędzla i pióra
$hBrush = _GDIPlus_BrushCreateSolid(0xFFDD2200)
$hPen = _GDIPlus_PenCreate(0xFF000000, 2)

;tworzenie ścieżki z tekstem
$hPath = _GDIPlus_PathCreate()
$hFamily = _GDIPlus_FontFamilyCreate("Arial")
$tLayout = _GDIPlus_RectFCreate(80,10)
_GDIPlus_PathAddString($hPath, "Skalowanie tekstu do okna", $tLayout, $hFamily, 0, 40)

_GDIPlus_GraphicsFillPath($hGraphic, $hPath, $hBrush) ;wypełnienie ścieżki bez skalowania
_GDIPlus_GraphicsDrawPath($hGraphic, $hPath, $hPen) ;rysowanie ścieżki bez skalowania
Sleep(2000)

$aBounds = _GDIPlus_PathGetWorldBounds($hPath) ;odczyt danych prostokąta mieszcącego ścieżkę
$hMatrix = _GDIPlus_MatrixCreate()

;przesunięcie tekstu do lewego górnego narożnika
_GDIPlus_MatrixTranslate($hMatrix, -$aBounds[0], -$aBounds[1])

;skalowanie tekstu do całej powierzchni okna
_GDIPlus_MatrixScale($hMatrix, $iW / $aBounds[2], $iH / $aBounds[3], True)

_GDIPlus_PathTransform($hPath, $hMatrix) ;transformacja ścieżki z tekstem

_GDIPlus_GraphicsFillPath($hGraphic, $hPath, $hBrush) ;wypełnienie ścieżki skalowanej
_GDIPlus_GraphicsDrawPath($hGraphic, $hPath, $hPen) ;rysowanie ścieżki skalowanej

Do
Until GUIGetMsg() = $GUI_EVENT_CLOSE

;zwolnienie zasobów
_GDIPlus_MatrixDispose($hMatrix)
_GDIPlus_FontFamilyDispose($hFamily)
_GDIPlus_PathDispose($hPath)
_GDIPlus_PenDispose($hPen)
_GDIPlus_BrushDispose($hBrush)
_GDIPlus_GraphicsDispose($hGraphic)
_GDIPlus_Shutdown()

_GDIPlus_PathSetFillMode

[edytuj]
#include <GDIPlus.au3>
_GDIPlus_PathSetFillMode ( $hPath, $iFillMode )

Funkcja ustawia tryb wypełniania ścieżki. Zwraca True gdy sukces, lub False gdy wystąpił błąd.

$hPath - uchwyt do ścieżki

$iFillMode - kod trybu wypełniania, 0 - tryb XOR, 1 - tryb OR


_GDIPlus_PathGetFillMode

[edytuj]
#include <GDIPlus.au3>
_GDIPlus_PathGetFillMode ( $hPath )

Funkcja zwraca tryb wypełniania ścieżki. Jeżeli wystąpił błąd makro @error przyjmuje wartość różną od zera.

0 - tryb XOR
1 - tryb OR

$hPath - uchwyt do ścieżki

Przykład:

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

$hGUI = GUICreate("", 380, 380)
GUISetState()

_GDIPlus_Startup()
$hGraphic = _GDIPlus_GraphicsCreateFromHWND($hGUI)

;tworzenie pędzla i pióra
$hBrush = _GDIPlus_BrushCreateSolid(0xFFF00000)
$hPen = _GDIPlus_PenCreate(0xFF8800AA, 2)

;tworzenie ścieżki
$hPath = _GDIPlus_PathCreate()
_GDIPlus_PathAddEllipse($hPath, 50, 50, 180, 180)
_GDIPlus_PathAddEllipse($hPath, 150, 50, 180, 180)
_GDIPlus_PathAddEllipse($hPath, 100, 150, 180, 180)

$iTimer = 0
Do
   If TimerDiff($iTimer) > 2000 Then
      $iMode = _GDIPlus_PathGetFillMode($hPath) ;odczyt trybu wypełniania
      WinSetTitle($hGUI, "", "Mode = " & $iMode & ($iMode ? "  (Tryb OR)" :  "  (Tryb XOR)"))
      _GDIPlus_GraphicsClear($hGraphic, 0xFFFFFFFF) ;czyszczenie grafiki
      _GDIPlus_GraphicsFillPath($hGraphic, $hPath, $hBrush) ;wypełnienie ścieżki
      _GDIPlus_GraphicsDrawPath($hGraphic, $hPath, $hPen) ;rysowanie ścieżki
      _GDIPlus_PathSetFillMode($hPath, Not $iMode) ;ustawienie trybu wypełniania na przeciwny
      $iTimer = TimerInit()
   EndIf
Until GUIGetMsg() = $GUI_EVENT_CLOSE

;zwolnienie zasobów
_GDIPlus_PathDispose($hPath)
_GDIPlus_BrushDispose($hBrush)
_GDIPlus_PenDispose($hPen)
_GDIPlus_GraphicsDispose($hGraphic)
_GDIPlus_Shutdown()


_GDIPlus_PathIsOutlineVisiblePoint

[edytuj]
#include <GDIPlus.au3>
_GDIPlus_PathIsOutlineVisiblePoint ( $hPath, $nX, $nY [, $hPen = 0 [, $hGraphics = 0]] )

Funkcja zwraca True gdy punkt znajduje się na ścieżce graficznej. W przeciwnym razie zwraca False.

$hPath - uchwyt do ścieżki

$nX, $nY - współrzędne sprawdzanego punktu

$hPen - uchwyt do pióra, grubość tego pióra będzie uwzględniana w ocenie położenia punktu

$hGraphics - uchwyt do obiektu graphics

Przykład jak dla _GDIPlus_PathIsVisiblePoint.


_GDIPlus_PathIsVisiblePoint

[edytuj]
#include <GDIPlus.au3>
_GDIPlus_PathIsVisiblePoint ( $hPath, $nX, $nY [, $hGraphics = 0] )

Funkcja zwraca True gdy punkt znajduje się wewnątrz ścieżki graficznej. W przeciwnym razie zwraca False.

$hPath - uchwyt do ścieżki

$nX, $nY - współrzędne sprawdzanego punktu

$hGraphics - uchwyt do obiektu graphics

UWAGA: Standardowo ocena co jest wnętrzem ścieżki jest typu XOR, tzn. dla nałożenia nieparzystej ilości wnętrz pojedynczych elementów (widać to na poniższym przykładzie). Funkcja reaguje na zmianę interpretacji funkcją _GDIPlus_PathSetFillMode. Dla typu OR za wnętrze zostanie uznany obszar zajmowany przez wnętrze przynajmniej jednego pojedynczego elementu.

Przykład:

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

$hGUI = GUICreate("", 380, 380)
GUISetState()

_GDIPlus_Startup()
$hGraphic = _GDIPlus_GraphicsCreateFromHWND($hGUI)
_GDIPlus_GraphicsSetSmoothingMode($hGraphic, 2)

;tworzenie pędzla i pióra
$hBrush = _GDIPlus_BrushCreateSolid(0xFFF00000)
$hPen = _GDIPlus_PenCreate(0xFF8800AA, 8)

;tworzenie ścieżki
$hPath = _GDIPlus_PathCreate()
_GDIPlus_PathAddEllipse($hPath, 50, 50, 180, 180)
_GDIPlus_PathAddEllipse($hPath, 150, 50, 180, 180)
_GDIPlus_PathAddEllipse($hPath, 100, 150, 180, 180)

_GDIPlus_GraphicsFillPath($hGraphic, $hPath, $hBrush) ;wypełnienie ścieżki
_GDIPlus_GraphicsDrawPath($hGraphic, $hPath, $hPen) ;rysowanie ścieżki

Do
   $iX = GUIGetCursorInfo($hGUI)[0]
   $iY = GUIGetCursorInfo($hGUI)[1]
   If _GDIPlus_PathIsOutlineVisiblePoint($hPath, $iX, $iY, $hPen) Then
      WinSetTitle($hGUI, "", "Ścieżka")
   ElseIf _GDIPlus_PathIsVisiblePoint($hPath, $iX, $iY) Then
      WinSetTitle($hGUI, "", "Wnętrze ścieżki")
   Else
      WinSetTitle($hGUI, "", "")
   EndIf
 Until GUIGetMsg() = $GUI_EVENT_CLOSE

;zwolnienie zasobów
_GDIPlus_PathDispose($hPath)
_GDIPlus_BrushDispose($hBrush)
_GDIPlus_PenDispose($hPen)
_GDIPlus_GraphicsDispose($hGraphic)
_GDIPlus_Shutdown()


_GDIPlus_PathReset

[edytuj]
#include <GDIPlus.au3>
_GDIPlus_PathReset ( $hPath )

Funkcja resetuje ścieżkę graficzną, tzn. usuwa wszystkie elementy graficzne i ustawia tryb wypełniania na 0. Zwraca True gdy sukces, lub False gdy wystąpił błąd.

$hPath - uchwyt do ścieżki

Przykład :

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

$hGUI = GUICreate("GDI+", 850, 300)
GUISetState()

_GDIPlus_Startup()
$hGraphics = _GDIPlus_GraphicsCreateFromHWND($hGUI)
_GDIPlus_GraphicsSetSmoothingMode($hGraphics, 2) ;włączenie wygładzania krawędzi
$hPath = _GDIPlus_PathCreate()
$hFormat = _GDIPlus_StringFormatCreate()
$hFamily = _GDIPlus_FontFamilyCreate("Arial")
$tLayout = _GDIPlus_RectFCreate(0, 0, 900, 400)
$hBrush = _GDIPlus_BrushCreateSolid()
$hPen = _GDIPlus_PenCreate()

For $i = 0 To 9
_GDIPlus_PathReset($hPath) ;resetowanie ścieżki
_GDIPlus_PathAddString($hPath, "AutoIt", $tLayout, $hFamily, 2, 15+30*$i, $hFormat)
_GDIPlus_GraphicsDrawPath($hGraphics, $hPath)
_GDIPlus_BrushSetSolidColor($hBrush, 0xFF000000 + Random(0, 0xFFFFFF, 1))
_GDIPlus_GraphicsFillPath($hGraphics, $hPath, $hBrush)
Sleep(400)
Next

Do
Until GUIGetMsg() = $GUI_EVENT_CLOSE

;zwolnienie zasobów
_GDIPlus_PenDispose($hPen)
_GDIPlus_BrushDispose($hBrush)
_GDIPlus_StringFormatDispose($hFormat)
_GDIPlus_FontFamilyDispose($hFamily)
_GDIPlus_PathDispose($hPath)
_GDIPlus_GraphicsDispose($hGraphics)
_GDIPlus_Shutdown()


_GDIPlus_PathReverse

[edytuj]
#include <GDIPlus.au3>
_GDIPlus_PathReverse ( $hPath )

Funkcja powoduje odwrócenie kolejności punktów definiujących ścieżkę graficzną. Zwraca True gdy sukces, lub False gdy wystąpił błąd.

$hPath - uchwyt do ścieżki

W poniższym przykładzie zastosowano _GDIPlus_PathReverse oby połączyć końce dwóch ścieżek, a nie jak jest standardowo koniec pierwszej ścieżki z początkiem drugiej:

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

Local $iW = 600, $iH = 600

$hGUI = GUICreate("GDI+", $iW, $iH)
GUISetState()

_GDIPlus_Startup()
$hGraphic = _GDIPlus_GraphicsCreateFromHWND($hGUI)
_GDIPlus_GraphicsSetSmoothingMode($hGraphic, 2) ;włączenie wygładzania krawędzi

$hBrush = _GDIPlus_BrushCreateSolid(0xFFFFA000)
$hPen = _GDIPlus_PenCreate(0xFF000000, 2)
$hPath = _GDIPlus_PathCreate()

;tworzenie spirali
Local $iXOld = 0, $iYOld = 0, $iX, $iY, $iAngle = 0, $iRadius = 0
For $i = 0 To 200
   $iX = Cos($iAngle) * $iRadius
   $iY = Sin($iAngle) * $iRadius
   $iAngle -= 0.1
   $iRadius = $iAngle^2 / 2
   _GDIPlus_PathAddLine($hPath, $iXOld, $iYOld, $iX, $iY)
   $iXOld = $iX
   $iYOld = $iY
Next

;przesunięcie układu współrzędnych na środek okna
_GDIPlus_GraphicsTranslateTransform($hGraphic, $iW/2, $iH/2)

$hPath_Clone = _GDIPlus_PathClone($hPath) ;klonowanie ścieżki
_GDIPlus_PathReverse($hPath_Clone) ;odwrócenie kolejności punktów ścieżki

$hMatrix = _GDIPlus_MatrixCreate() ;tworzenie obiektu matrix

;skalowanie ścieżki
_GDIPlus_MatrixScale($hMatrix, 1.5, 1.5)
_GDIPlus_PathTransform($hPath_Clone, $hMatrix)

_GDIPlus_PathAddPath($hPath, $hPath_Clone) ;łączenie ścieżek
_GDIPlus_GraphicsFillPath($hGraphic, $hPath, $hBrush) ;wypełnienie ścieżki
_GDIPlus_GraphicsDrawPath($hGraphic, $hPath, $hPen) ;rysowanie ścieżki

Do
Until GUIGetMsg() = $GUI_EVENT_CLOSE

;zwolnienie zasobów
_GDIPlus_MatrixDispose($hMatrix)
_GDIPlus_PathDispose($hPath)
_GDIPlus_PathDispose($hPath_Clone)
_GDIPlus_BrushDispose($hBrush)
_GDIPlus_PenDispose($hPen)
_GDIPlus_GraphicsDispose($hGraphic)
_GDIPlus_Shutdown()


_GDIPlus_PathSetMarker

[edytuj]
#include <GDIPlus.au3>
_GDIPlus_PathSetMarker ( $hPath )

Funkcja ustawia marker na ostatnim punkcie ścieżki. Zwraca True gdy sukces, lub False gdy wystąpił błąd.

$hPath - uchwyt do ścieżki

Za pomocą funkcji _GDIPlus_PathSetMarker można podzielić ścieżkę na tak zwane podrozdziały (sekcje). Sposób wykorzystania podrozdziałów w opisie obiektu GraphicsPathIterator.


_GDIPlus_PathStartFigure

[edytuj]
#include <GDIPlus.au3>
_GDIPlus_PathStartFigure ( $hPath )

Funkcja rozpoczyna w ramach danej ścieżki tworzenie nowej figury bez zamykania poprzedniej. Zwraca True gdy sukces, lub False gdy wystąpił błąd.

$hPath - uchwyt do ścieżki

W poniższym przykładzie rysujemy trzy identyczne linie pionowe. Po lewej stronie okna system standardowo dodaje linie łączące koniec poprzedniej linii z początkiem następnej. Po prawej stronie użyliśmy funkcji _GDIPlus_PathStartFigure informując system, że każda linia jest osobną figurą i dodatkowych linii już nie ma:

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

$hGUI = GUICreate("GDI+", 700, 300)
GUISetState()

_GDIPlus_Startup()
$hGraphic = _GDIPlus_GraphicsCreateFromHWND($hGUI)

$hPen = _GDIPlus_PenCreate(0xFFFF0000, 5)

;ścieżka bez _GDIPlus_PathStartFigure
$hPath1 = _GDIPlus_PathCreate()
_GDIPlus_PathAddLine($hPath1, 50, 50, 50, 200)
_GDIPlus_PathAddLine($hPath1, 150, 50, 150, 200)
_GDIPlus_PathAddLine($hPath1, 250, 50, 250, 200)
_GDIPlus_GraphicsDrawPath($hGraphic, $hPath1, $hPen)

;ścieżka z _GDIPlus_PathStartFigure
$hPath2 = _GDIPlus_PathCreate()
_GDIPlus_PathAddLine($hPath2, 450, 50, 450, 200)
_GDIPlus_PathStartFigure($hPath2)
_GDIPlus_PathAddLine($hPath2, 550, 50, 550, 200)
_GDIPlus_PathStartFigure($hPath2)
_GDIPlus_PathAddLine($hPath2, 650, 50, 650, 200)
_GDIPlus_GraphicsDrawPath($hGraphic, $hPath2, $hPen)

Do
Until GUIGetMsg() = $GUI_EVENT_CLOSE

;zwolnienie zasobów
_GDIPlus_PathDispose($hPath1)
_GDIPlus_PathDispose($hPath2)
_GDIPlus_PenDispose($hPen)
_GDIPlus_GraphicsDispose($hGraphic)
_GDIPlus_Shutdown()


_GDIPlus_PathTransform

[edytuj]
#include <GDIPlus.au3>
_GDIPlus_PathTransform ( $hPath, $hMatrix )

Funkcja dokonuje transformacji ścieżki graficznej zgodnie z przekształceniami zdefiniowanymi w obiekcie matrix. Zwraca True gdy sukces, lub False gdy wystąpił błąd.

$hPath - uchwyt do ścieżki

$hMatrix - uchwyt do obiektu matrix

Przykład:

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

Local $iW = 600, $iH = 600
$hGUI = GUICreate("GDI+", $iW, $iH)
GUISetState()

_GDIPlus_Startup()
$hGraphic = _GDIPlus_GraphicsCreateFromHWND($hGUI)
_GDIPlus_GraphicsSetSmoothingMode($hGraphic, 2) ;włączenie wygładzania krawędzi

;przesunięcie układu współrzędnych do środka okna
_GDIPlus_GraphicsTranslateTransform($hGraphic, $iW/2, $iH/2)

$hPen = _GDIPlus_PenCreate(0xFF000000, 2)

$hPath = _GDIPlus_PathCreate()
_GDIPlus_PathAddEllipse($hPath, -250, -20, 500, 40)

$hMatrix = _GDIPlus_MatrixCreate()
_GDIPlus_MatrixRotate($hMatrix, 4)

For $i=0 To 45
   _GDIPlus_PathTransform($hPath, $hMatrix) ;transformacja ścieżki graficznej
   _GDIPlus_GraphicsDrawPath($hGraphic, $hPath, $hPen)
Next

Do
Until GUIGetMsg() = $GUI_EVENT_CLOSE

;zwolnienie zasobów
_GDIPlus_MatrixDispose($hMatrix)
_GDIPlus_PathDispose($hPath)
_GDIPlus_PenDispose($hPen)
_GDIPlus_GraphicsDispose($hGraphic)
_GDIPlus_Shutdown()


_GDIPlus_PathWarp

[edytuj]
#include <GDIPlus.au3>
_GDIPlus_PathWarp ( $hPath, $hMatrix, $aPoints, $nX, $nY, $nWidth, $nHeight [, $iWarpMode = 0 [, $fFlatness = 0.25]] )

Funkcja dokonuje transformacji ścieżki. Zwraca True gdy sukces, lub False gdy wystąpił błąd.

$hPath - uchwyt do ścieżki

$hMatrix - uchwyt do obiektu matrix, 0 oznacza brak transformacji matrix

$aPoints - dwuwymiarowa tablica ze współrzędnymi narożników czworoboku (równoległoboku), będącego wraz z przekształcanym prostokątem podstawą do wykonania transformacji. Tablica musi zawierać dane 3 lub 4 punktów. Dla 3 punktów obszar będzie miał kształt równoległoboku (współrzędne 4 narożnika będą wyliczone automatycznie), dla 4 punktów będzie dowolnym czworobokiem.

[0][0] - ilość punktów, liczba ta powinna wynosić 3 lub 4
[1][0] - narożnik 1, współrzędna X
[1][1] - narożnik 1, współrzędna Y
[2][0] - narożnik 2, współrzędna X
[2][1] - narożnik 2, współrzędna Y
[3][0] - narożnik 3, współrzędna X
[3][1] - narożnik 3, współrzędna Y
[4][0] - narożnik 4, współrzędna X (opcjonalnie)
[4][1] - narożnik 4, współrzędna Y (opcjonalnie)

$nX, $nY - współrzędne lewego górnego narożnika przekształcanego prostokąta

$nWidth, $nHeight - szerokość i wysokość przekształcanego prostokąta

$iWarpMode - tryb przekształcenia, 0 - tryb perspektywy (domyślnie), 1 - tryb dwuliniowy

$fFlatness - liczba rzeczywista określająca maksymalną odchyłkę między ścieżką, a jej przybliżeniem (dla wartości 0 transformacja nie jest realizowana)

Transformacja polega na takim odkształceniu obszaru grafiki, że wyjściowy prostokąt przyjmie kształt, wielkość i położenie zdefiniowanego w tablicy czworokąta (równoległoboku). W czasie transformacji wyjściowa ścieżka jest zastąpiona linią łamaną. Parametr $fFlatness określa dokładność przybliżenia, im wartość mniejsza tym łamana składa się z większej liczby odcinków i przybliżenie jest dokładniejsze.

Opcjonalne w obiekcie matrix można zdefiniować dodatkową transformację (np. obrót, skalowanie, itp.).

Przykład:

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

Local $iW = 600, $iH = 300
$hGUI = GUICreate("GDI+", $iW, $iH)
GUISetState()

_GDIPlus_Startup()
$hGraphic = _GDIPlus_GraphicsCreateFromHWND($hGUI)
_GDIPlus_GraphicsSetSmoothingMode($hGraphic, 2) ;włączenie wygładzania krawędzi
_GDIPlus_GraphicsClear($hGraphic, 0xFF000000) ;czarne tło

$hPath = _GDIPlus_PathCreate()
$hFormat = _GDIPlus_StringFormatCreate()
_GDIPlus_StringFormatSetAlign($hFormat, 1)

$hFamily = _GDIPlus_FontFamilyCreate("Arial Black")
$tLayout = _GDIPlus_RectFCreate(0, 0, $iW, $iH)
$sTxt = "AutoIt" & @LF & "to jest to!" & @LF & "Poleca Wasta"
_GDIPlus_PathAddString($hPath, $sTxt, $tLayout, $hFamily, 0, 72, $hFormat)

;czworokąt transformacji
Dim $aPoints[5][2] = [[4]]
$aPoints[1][0] = $iW * 0.4
$aPoints[1][1] = $iH * 0.3
$aPoints[2][0] = $iW * 0.6
$aPoints[2][1] = $iH * 0.3
$aPoints[3][0] = 0
$aPoints[3][1] = $iH
$aPoints[4][0] = $iW
$aPoints[4][1] = $iH

_GDIPlus_PathWarp($hPath, 0, $aPoints, 0, 0, $iW, $iH) ;transformacja warp

$hBrush = _GDIPlus_BrushCreateSolid(0xFFFFFF00)
_GDIPlus_GraphicsFillPath($hGraphic, $hPath, $hBrush)

Do
Until GUIGetMsg() = $GUI_EVENT_CLOSE

;zwolnienie zasobów
_GDIPlus_FontFamilyDispose($hFamily)
_GDIPlus_StringFormatDispose($hFormat)
_GDIPlus_PathDispose($hPath)
_GDIPlus_BrushDispose($hBrush)
_GDIPlus_GraphicsDispose($hGraphic)
_GDIPlus_Shutdown()


_GDIPlus_PathWiden

[edytuj]
#include <GDIPlus.au3>
_GDIPlus_PathWiden ( $hPath, $hPen [, $hMatrix = 0 [, $fFlatness = 0.25]] )

Funkcja dokonuje transformacji ścieżki. Zwraca True gdy sukces, lub False gdy wystąpił błąd.

$hPath - uchwyt do ścieżki

$hPen - uchwyt pióra, które jest podstawą transformacji

$hMatrix - uchwyt do obiektu matrix, zawierającego dane dodatkowej transformacji, 0 oznacza brak transformacji matrix

$fFlatness - liczba rzeczywista określająca maksymalną odchyłkę między ścieżką, a jej przybliżeniem (dla wartości 0 transformacja nie jest realizowana)

Transformacja polega na zastąpieniu wyjściowej ścieżki poprzez obszar ją otaczający. Obszar ten ma szerokość pióra $hPen i jest utworzony przez linie łamane przybliżające kształt wyjściowej ścieżki. Parametr $fFlatness określa dokładność przybliżenia, im wartość mniejsza tym łamana składa się z większej liczby odcinków i przybliżenie jest dokładniejsze.

Jak widać w przykładzie 2 sposób tworzenia łamanych jest dość skomplikowany i wyrysowana linia ma zagmatwany przebieg. Natomiast wypełnienie obszaru ścieżki jest prawidłowe.

Opcjonalne w obiekcie matrix można zdefiniować dodatkową transformację (np. obrót, skalowanie, itp.).

Przykład 1:

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

$hGUI = GUICreate("GDI+", 1200, 250)
GUISetState()

_GDIPlus_Startup()
$hGraphics = _GDIPlus_GraphicsCreateFromHWND($hGUI)

$hPath = _GDIPlus_PathCreate()
$hFormat = _GDIPlus_StringFormatCreate()
$hFamily = _GDIPlus_FontFamilyCreate("Arial")
$tLayout = _GDIPlus_RectFCreate(0, 0, 1200, 400)
_GDIPlus_PathAddString($hPath, "AutoIt to jest to!", $tLayout, $hFamily, 0, 160, $hFormat)
_GDIPlus_PathAddRectangle($hPath, 50, 180, 300, 20)

$hBrush = _GDIPlus_BrushCreateSolid(0xFF0000FF)
_GDIPlus_GraphicsDrawPath($hGraphics, $hPath) ;rysowanie ścieżki przed transformacją

Sleep(2000)

_GDIPlus_BrushSetSolidColor($hBrush, 0xFFFF5000)
$hPen = _GDIPlus_PenCreate(0, 8)
_GDIPlus_PathWiden($hPath, $hPen) ;transformacja ścieżki
_GDIPlus_GraphicsFillPath($hGraphics, $hPath, $hBrush) ;wypełnienie ścieżki

Do
Until GUIGetMsg() = $GUI_EVENT_CLOSE

;zwolnienie zasobów
_GDIPlus_PenDispose($hPen)
_GDIPlus_BrushDispose($hBrush)
_GDIPlus_StringFormatDispose($hFormat)
_GDIPlus_FontFamilyDispose($hFamily)
_GDIPlus_PathDispose($hPath)
_GDIPlus_GraphicsDispose($hGraphics)
_GDIPlus_Shutdown()


Przykład 2 (z dodatkową transformacją obiektem matrix):

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

$hGUI = GUICreate("GDI+", 800, 500)
GUISetState()

_GDIPlus_Startup()
$hGraphics = _GDIPlus_GraphicsCreateFromHWND($hGUI)

;tworzenie ścieżki
$hPath = _GDIPlus_PathCreate()
_GDIPlus_PathAddRectangle($hPath, 250, 80, 300, 50)
_GDIPlus_PathAddEllipse($hPath, 600, 78, 70, 50)

_GDIPlus_GraphicsDrawPath($hGraphics, $hPath) ;rysowanie ścieżki przed transformacją

Sleep(2000)

;tworzenie obiektu matrix
$hMatrix = _GDIPlus_MatrixCreate()
_GDIPlus_MatrixRotate($hMatrix, 30)

$hPen = _GDIPlus_PenCreate(0, 15)
_GDIPlus_PathWiden($hPath, $hPen, $hMatrix, 5) ;transformacja ścieżki

_GDIPlus_GraphicsDrawPath($hGraphics, $hPath, 0) ;wyrysowanie ścieżki
Sleep(2000)
$hBrush = _GDIPlus_BrushCreateSolid(0xFF0000FF)
_GDIPlus_BrushSetSolidColor($hBrush, 0xFFFF0000)
_GDIPlus_GraphicsFillPath($hGraphics, $hPath, $hBrush) ;wypełnienie ścieżki

Do
Until GUIGetMsg() = $GUI_EVENT_CLOSE

;zwolnienie zasobów
_GDIPlus_PenDispose($hPen)
_GDIPlus_BrushDispose($hBrush)
_GDIPlus_PathDispose($hPath)
_GDIPlus_MatrixDispose($hMatrix)
_GDIPlus_GraphicsDispose($hGraphics)
_GDIPlus_Shutdown()

_GDIPlus_PathWindingModeOutline

[edytuj]
#include <GDIPlus.au3>
_GDIPlus_PathWindingModeOutline ( $hPath [, $hMatrix = 0 [, $fFlatness = 0.25]] )

Funkcja zamienia ścieżkę na jej obrys. Zwraca True gdy sukces, lub False gdy wystąpił błąd.

$hPath - uchwyt do ścieżki

$hMatrix - wskaźnik do obiektu Matrix, który określa transformację. Wartość 0 oznacza, że transformacja nie występuje.

$fFlatness - liczba rzeczywista, która określa maksymalny błąd między ścieżką, a jego obrysem. Im mniejsza liczba tym większa ilość odcinków aproksymacji.

Przykład:

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

$hGUI = GUICreate("GDI+", 800, 400)
GUISetState()

_GDIPlus_Startup()
$hGraphic = _GDIPlus_GraphicsCreateFromHWND($hGUI)
_GDIPlus_GraphicsClear($hGraphic, 0xFFFFFFFF)

$hPen = _GDIPlus_PenCreate(0xFF8800AA, 2)

$hPath = _GDIPlus_PathCreate()

_GDIPlus_PathAddLine($hPath, 106, 330, 200, 40)
_GDIPlus_PathAddLine($hPath, 294, 330, 48, 151)
_GDIPlus_PathAddLine($hPath, 352, 151, 106, 330)

$hPath_Clone = _GDIPlus_PathClone($hPath)
$hMatrix = _GDIPlus_MatrixCreate()
_GDIPlus_MatrixTranslate($hMatrix, 400, 0)

_GDIPlus_PathWindingModeOutline($hPath_Clone, $hMatrix)

_GDIPlus_GraphicsDrawString($hGraphic, "Ścieżka oryginalna", 40, 10)
_GDIPlus_GraphicsDrawPath($hGraphic, $hPath, $hPen)

_GDIPlus_GraphicsDrawString($hGraphic, "Ścieżka po transformacji", 440, 10)
_GDIPlus_GraphicsDrawPath($hGraphic, $hPath_Clone, $hPen)

Do
Until GUIGetMsg() = $GUI_EVENT_CLOSE

_GDIPlus_MatrixDispose($hMatrix)
_GDIPlus_PathDispose($hPath)
_GDIPlus_PathDispose($hPath_Clone)
_GDIPlus_PenDispose($hPen)
_GDIPlus_GraphicsDispose($hGraphic)
_GDIPlus_Shutdown()

Obiekt GraphicsPathIterator

[edytuj]

GraphicsPathIterator jest obiektem umożliwiającym iteracyjne przeglądanie ścieżek podrzędnych (podścieżek lub podrozdziałów) w obiekcie GraphicsPath.

Podścieżka to pojedyncza figura geometryczna dodawane do ścieżki którąś z funkcji _GDIPlus_PathAdd...

Podrozdział to fragment ścieżki zawarty pomiędzy markerami, początkiem ścieżki i pierwszym markerem lub ostatnim markerem i końcem ścieżki. Markery można definiować w sposób jawny za pomocą funkcji _GDIPlus_PathSetMarker.

Dla ścieżki zawierającej tekst podścieżkami są pojedyncze obiekty geometryczne tworzące znak. Na przykład litera B składa się z 3 podścieżek (obrys zewnętrzny i dwa obrysy wewnętrzne "brzuszków").

Podział na podrozdziały odbywa się poprzez niejawne wstawienie markerów pomiędzy pojedynczymi znakami (litera B będzie więc jednym podrozdziałem).


_GDIPlus_PathIterCreate

[edytuj]
#include <GDIPlus.au3>
_GDIPlus_PathIterCreate ( $hPath )

Funkcja tworzy obiekt GraphicsPathIterator na podstawie ścieżki o uchwycie podanym jako parametr. Zwraca uchwyt do tworzonego obiektu, lub 0 gdy wystąpił błąd.

$hPath - uchwyt do ścieżki


_GDIPlus_PathIterDispose

[edytuj]
#include <GDIPlus.au3>
_GDIPlus_PathIterDispose ( $hPathIter )

Funkcja likwiduje obiekt GraphicsPathIterator. Zwraca True gdy sukces, lub False gdy wystąpił błąd.

$hPathIter - uchwyt do obiektu GraphicsPathIterator


_GDIPlus_PathIterGetSubpathCount

[edytuj]
#include <GDIPlus.au3>
_GDIPlus_PathIterGetSubpathCount ( $hPathIter )

Funkcja zwraca ilość podścieżek, lub -1 gdy wystąpił błąd.

$hPathIter - uchwyt do obiektu GraphicsPathIterator


_GDIPlus_PathIterNextSubpathPath

[edytuj]
#include <GDIPlus.au3>
_GDIPlus_PathIterNextSubpathPath ( $hPathIter, $hSubPath )

Funkcja odczytuje dane aktualnej podścieżki, dodaje je do ścieżki $hSubPath i przesuwa iterator na następną podścieżkę. Zwraca dwuelementową tablicę z ilością punktów podścieżki. Jeżeli wystąpi błąd makro @error przyjmuje wartość większą od 0.

[0] - ilość punktów w pobranej podścieżce, lub 0 gdy nie ma więcej danych do pobrania
[1] - True jeżeli podścieżka jest zamknięta, w przeciwnym razie False

$hPathIter - uchwyt do obiektu GraphicsPathIterator

$hSubPath - uchwyt do ścieżki, do której będą dodane dane podścieżki


_GDIPlus_PathIterNextMarkerPath

[edytuj]
#include <GDIPlus.au3>
_GDIPlus_PathIterNextMarkerPath ( $hPathIter, $hPath )

Funkcja odczytuje dane aktualnego podrozdziału, dodaje je do ścieżki $hSubPath i przesuwa iterator na następny podrozdział. Zwraca ilość punktów podrozdziału, lub 0 gdy nie ma więcej danych do pobrania. Jeżeli wystąpi błąd makro @error przyjmuje wartość większą od 0.

$hPathIter - uchwyt do obiektu GraphicsPathIterator

$hSubPath - uchwyt do ścieżki, do której będą dodane dane podrozdziału


_GDIPlus_PathIterRewind

[edytuj]
#include <GDIPlus.au3>
_GDIPlus_PathIterRewind ( $hPathIter )

Funkcja przesuwa iterator na pierwszą podścieżkę lub rozdział. Zwraca True gdy sukces, lub False gdy wystąpił błąd.

$hPathIter - uchwyt do obiektu GraphicsPathIterator


Przykład wykorzystania obiektu GraphicsPathIterator i iteracji po podścieżkach:

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

Local $iBG = 0xFFFFFF00

$hGUI = GUICreate("GDI+", 720, 120)
GUISetState()

_GDIPlus_Startup()
$hGraphics = _GDIPlus_GraphicsCreateFromHWND($hGUI)
_GDIPlus_GraphicsSetSmoothingMode($hGraphics, 2) ;włączenie wygładzania krawędzi
_GDIPlus_GraphicsClear($hGraphics, $iBG) ;czyszczenie okna

$hPen = _GDIPlus_PenCreate(0xFFFF0000, 3)

;tworzenie ścieżki z napisem
$hPath = _GDIPlus_PathCreate()
$hFormat = _GDIPlus_StringFormatCreate()
$hFamily = _GDIPlus_FontFamilyCreate("Arial")
$tLayout = _GDIPlus_RectFCreate(0, 0, 720, 120)
_GDIPlus_PathAddString($hPath, "Jesteś szalona!", $tLayout, $hFamily, 0, 96, $hFormat)

_GDIPlus_GraphicsDrawPath($hGraphics, $hPath, $hPen) ;rysowanie wyjściowej wersji napisu

Sleep(1000)

$hIter = _GDIPlus_PathIterCreate($hPath) ;tworzenie obiektu GraphicsPathIterator
$iIterCnt = _GDIPlus_PathIterGetSubpathCount($hIter) ;ilość podścieżek
$hSubPath = _GDIPlus_PathCreate() ;tworzenie ścieżki która będzie zawierać dane kolejnych podścieżek

Do
   _GDIPlus_GraphicsClear($hGraphics, $iBG) ;czyszczenie okna
   For $i = 1 To $iIterCnt
      $hMatrix = _GDIPlus_MatrixCreate() ;tworzenie obiektu Matrix
      _GDIPlus_PathReset($hSubPath) ;zerowanie ścieżki
      _GDIPlus_PathIterNextSubpathPath($hIter, $hSubPath) ;dane podścieżki dodane do ścieżki $hSubPath
      $aBounds = _GDIPlus_PathGetWorldBounds($hSubPath) ;dane prostokąta mieszczącego podścieżkę
	  
	  ;definiowanie obiektu Matrix zawierającego przekształcenia kolejnych podścieżek
      _GDIPlus_MatrixTranslate($hMatrix, -($aBounds[0] + $aBounds[2] / 2), -($aBounds[1] + $aBounds[3] / 2))
      _GDIPlus_MatrixRotate($hMatrix, Random(-30, 30), True)
      _GDIPlus_MatrixTranslate($hMatrix, $aBounds[0] + $aBounds[2] / 2, $aBounds[1] + $aBounds[3] / 2, True)
	  
      _GDIPlus_PathTransform($hSubPath, $hMatrix) ;transformacja podścieżki
      _GDIPlus_MatrixDispose($hMatrix) ;likwidacja obiektu Matrix
      _GDIPlus_GraphicsDrawPath($hGraphics, $hSubPath, $hPen) ;rysowanie podścieżki po transformacji
   Next
   _GDIPlus_PathIterRewind($hIter) ;powrót do pierwszej podścieżki
   Sleep(50)
Until GUIGetMsg() = $GUI_EVENT_CLOSE

;zwolnienie zasobów
_GDIPlus_StringFormatDispose($hFormat)
_GDIPlus_FontFamilyDispose($hFamily)
_GDIPlus_PathDispose($hSubPath)
_GDIPlus_PathIterDispose($hIter)
_GDIPlus_PathDispose($hPath)
_GDIPlus_PenDispose($hPen)
_GDIPlus_GraphicsDispose($hGraphics)
_GDIPlus_Shutdown()


Przykład wykorzystania obiektu GraphicsPathIterator i iteracji po podrozdziałach:

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

$hGUI = GUICreate("GDI+", 600, 300)
GUISetState()

_GDIPlus_Startup()
$hGraphics = _GDIPlus_GraphicsCreateFromHWND($hGUI)
_GDIPlus_GraphicsSetSmoothingMode($hGraphics, 2)
_GDIPlus_GraphicsClear($hGraphics, 0xFF000000)

$hBrush = _GDIPlus_BrushCreateSolid(0xFFAA00FF)
$hPen = _GDIPlus_PenCreate(0xFFFFBB00, 2)

$hPath = _GDIPlus_PathCreate()
$hFormat = _GDIPlus_StringFormatCreate()
_GDIPlus_StringFormatSetAlign($hFormat, 1)
$hFamily = _GDIPlus_FontFamilyCreate("Arial")
$tLayout = _GDIPlus_RectFCreate(0, 0, 600, 300)
_GDIPlus_PathAddString($hPath, "AutoIt to jest to!", $tLayout, $hFamily, 0, 112, $hFormat)

$hIter = _GDIPlus_PathIterCreate($hPath)
$hSubPath = _GDIPlus_PathCreate()

$iTimer = TimerInit()
Do
   If TimerDiff($iTimer) > 100 Then
   Do
      _GDIPlus_PathReset($hSubPath)
      $iPointCount = _GDIPlus_PathIterNextMarkerPath($hIter, $hSubPath) ;dane podrozdziału dodane do ścieżki $hSubPath
      If $iPointCount <= 0 Then ExitLoop ;sprawdzenie czy osiągnięto koniec ścieżki
      _GDIPlus_PenSetColor($hPen, 0xFF000000 + Random(0xFF, 0xFFFFFF, 1))
      _GDIPlus_BrushSetSolidColor($hBrush, BitOR(0xFF000000, Random(0xFF, 0xFFFFFF, 1)))
      _GDIPlus_GraphicsFillPath($hGraphics, $hSubPath, $hBrush)
      _GDIPlus_GraphicsDrawPath($hGraphics, $hSubPath, $hPen)
   Until 0
   _GDIPlus_PathIterRewind($hIter)
   $iTimer = TimerInit()
   EndIf
Until GUIGetMsg() = $GUI_EVENT_CLOSE

;zwolnienie zasobów
_GDIPlus_StringFormatDispose($hFormat)
_GDIPlus_FontFamilyDispose($hFamily)
_GDIPlus_PathDispose($hSubPath)
_GDIPlus_PathIterDispose($hIter)
_GDIPlus_PathDispose($hPath)
_GDIPlus_BrushDispose($hBrush)
_GDIPlus_PenDispose($hPen)
_GDIPlus_GraphicsDispose($hGraphics)
_GDIPlus_Shutdown()


Regiony (obiekt)

[edytuj]

Pojęcie regionu zostało wyjaśnione w części omawiającej bibliotekę WinAPI [WinAPI - Regiony].

Tam też znajduje się kilka funkcji do ich tworzenia i użycia. Teraz omówimy funkcje zawarte w bibliotece GDI+.

Istnieje pewna istotna różnica pomiędzy regionami utworzonymi w bibliotece WinAPI (region GDI), a tymi z GDI+ (region GDI+).

Region GDI+ to pewien obszar okna (można go np. zamalować jakimś pędzlem), natomiast region GDI to obszar okna, w którym to okno jest widoczne.

Region GDI+ można zamienić na region GDI za pomocą funkcji _GDIPlus_RegionGetHRgn.


_GDIPlus_RegionCreate

[edytuj]
#include <GDIPlus.au3>
_GDIPlus_RegionCreate ( )

Funkcja tworzy obiekt Region. Zwraca uchwyt do utworzonego obiektu, lub 0 gdy wystąpił błąd (makro @error przyjmie wartość różną od 0).

Tak utworzony region nie ma zdefiniowanego kształtu.


_GDIPlus_RegionClone

[edytuj]
#include <GDIPlus.au3>
_GDIPlus_RegionClone ( $hRegion )

Funkcja klonuje obiekt Region. Zwraca uchwyt do utworzonego obiektu, lub 0 gdy wystąpił błąd (makro @error przyjmie wartość różną od 0).

$hRegion - uchwyt do klonowanego obiektu


_GDIPlus_RegionCreateFromPath

[edytuj]
#include <GDIPlus.au3>
_GDIPlus_RegionCreateFromPath ( $hPath )

Funkcja tworzy obiekt Region na podstawie wcześniej zdefiniowanej ścieżki z wypełnieniem. Zwraca uchwyt do utworzonego obiektu, lub 0 gdy wystąpił błąd (makro @error przyjmie wartość różną od 0).

$hPath - uchwyt do ścieżki z wypełnieniem

Przykład:

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

;tworzenie testowego GUI
$hGUI = GUICreate(" Test Windows regions", 350, 210)
GUISetBkColor(0xff0000, $hGUI)
$btn_exit = GUICtrlCreateButton("Wyjście", 100, 150, 150)
$lab = GUICtrlCreateLabel("To jest testowe okno", 55, 40,150,85)
GUICtrlSetBkColor($lab,0xffff00)
GUISetState()

;okno normalne
Do
   $msg = GUIGetMsg()
Until $msg = $GUI_EVENT_CLOSE Or $msg = $btn_exit

_GDIPlus_Startup()

;region eliptyczny
$aPos = WinGetPos($hGUI)
$hPath = _GDIPlus_PathCreate() ;tworzenie ścieżki
_GDIPlus_PathAddEllipse($hPath, 10, 10, $aPos[2]-20, $aPos[3]-20)
$hReg = _GDIPlus_RegionCreateFromPath($hPath)
$hRGN = _GDIPlus_RegionGetHRgn($hReg)
_WinAPI_SetWindowRgn($hGUI, $hRGN)

Do
   $msg = GUIGetMsg()
Until $msg = $GUI_EVENT_CLOSE Or $msg = $btn_exit

;zwolnienie zasobów
_WinAPI_DeleteObject($hRGN)
_GDIPlus_RegionDispose($hReg)
_GDIPlus_PathDispose($hPath)
_GDIPlus_Shutdown()

Przykład z tekstem jako regionem:

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

$hGUI = GUICreate("GDI+", 620, 100)
GUISetBkColor(0x80) ;Set window background color to blue
GUISetState()

_GDIPlus_Startup()

$hFamily = _GDIPlus_FontFamilyCreate("Arial Black") ;tworzenie rodziny fontów
$tLayout = _GDIPlus_RectFCreate()

$hPath = _GDIPlus_PathCreate() ;tworzenie ścieżki
_GDIPlus_PathAddString($hPath, "AutoIt to jest to!", $tLayout, $hFamily, 0, 60, 0) ;dodanie tekstu do ścieżki

$hRegion = _GDIPlus_RegionCreateFromPath($hPath) ;tworzenie regionu
_GDIPlus_RegionCombineRect($hRegion, 600, 0, 20,20) ;modyfikacja regionu

$hRGN = _GDIPlus_RegionGetHRgn($hRegion, 0) ;tworzenie regionu GDI z regionu GDI+
_WinAPI_SetWindowRgn($hGUI, $hRGN) ;aktywacja regionu

Do
Until GUIGetMsg() = $GUI_EVENT_CLOSE

;zwolnienie zasobów
_GDIPlus_FontFamilyDispose($hFamily)
_WinAPI_DeleteObject($hRGN)
_GDIPlus_RegionDispose($hRegion)
_GDIPlus_PathDispose($hPath)
_GDIPlus_Shutdown()


_GDIPlus_RegionCreateFromRect

[edytuj]
#include <GDIPlus.au3>
_GDIPlus_RegionCreateFromRect ( $iX, $iY, $iWidth, $iHeight )

Funkcja tworzy obiekt Region o kształcie prostokąta. Zwraca uchwyt do utworzonego obiektu, lub 0 gdy wystąpił błąd (makro @error przyjmie wartość różną od 0).

$iX i $iY - współrzędne lewego górnego narożnika definiowanego regionu

$iWidth i $iHeight - szerokość i wysokość definiowanego regionu

Przykład:

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

;tworzenie testowego GUI
$hGUI = GUICreate(" Test Windows regions", 350, 210)
GUISetBkColor(0xff0000, $hGUI)
$btn_exit = GUICtrlCreateButton("Wyjście", 100, 150, 150)
$lab = GUICtrlCreateLabel("To jest testowe okno", 55, 40,150,85)
GUICtrlSetBkColor($lab,0xffff00)
GUISetState()

;okno normalne
Do
   $msg = GUIGetMsg()
Until $msg = $GUI_EVENT_CLOSE Or $msg = $btn_exit

_GDIPlus_Startup()

;region prostokątny
$hReg = _GDIPlus_RegionCreateFromRect(20, 10, 250, 200)
$hRGN = _GDIPlus_RegionGetHRgn($hReg)
_WinAPI_SetWindowRgn($hGUI, $hRGN)

Do
   $msg = GUIGetMsg()
Until $msg = $GUI_EVENT_CLOSE Or $msg = $btn_exit

;zwolnienie zasobów
_WinAPI_DeleteObject($hRGN)
_GDIPlus_RegionDispose($hReg)
_GDIPlus_Shutdown()


Przykład z zamalowaniem regionów:

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

;tworzenie testowego GUI
$hGUI = GUICreate(" Test Windows regions", 350, 210)
GUISetBkColor(0xff0000, $hGUI)
$btn_exit = GUICtrlCreateButton("Wyjście", 100, 150, 150)
$lab = GUICtrlCreateLabel("To jest testowe okno", 55, 40,150,85)
GUICtrlSetBkColor($lab,0xffff00)
GUISetState()

;okno normalne
Do
   $msg = GUIGetMsg()
Until $msg = $GUI_EVENT_CLOSE Or $msg = $btn_exit

_GDIPlus_Startup()

$aPos = WinGetPos($hGUI)

$hGraphic = _GDIPlus_GraphicsCreateFromHWND($hGUI)

$hBrush = _GDIPlus_BrushCreateSolid(0x7F8800AA)

;tworzenie regionów
$hRegion1 = _GDIPlus_RegionCreateFromRect(140, 0, 70, $aPos[3])
$hRegion2 = _GDIPlus_RegionCreateFromRect(0, 80, $aPos[2], $aPos[3]-160)

;zamalowanie regionów
_GDIPlus_GraphicsFillRegion($hGraphic, $hRegion1, $hBrush)
_GDIPlus_GraphicsFillRegion($hGraphic, $hRegion2, $hBrush)

Do
   $msg = GUIGetMsg()
Until $msg = $GUI_EVENT_CLOSE Or $msg = $btn_exit

;zwolnienie zasobów
_GDIPlus_BitmapDispose($hBrush)
_GDIPlus_RegionDispose($hRegion1)
_GDIPlus_RegionDispose($hRegion2)
_GDIPlus_GraphicsDispose($hGraphic)
_GDIPlus_Shutdown()


_GDIPlus_RegionDispose

[edytuj]
#include <GDIPlus.au3>
_GDIPlus_RegionDispose ( $hRegion )

Funkcja likwiduje obiekt Region. Zwraca True gdy sukces, lub False gdy wystąpił błąd (makro @error przyjmie wartość różną od 0).

$hRegion - uchwyt do likwidowanego obiektu


_GDIPlus_RegionCombinePath

[edytuj]
#include <GDIPlus.au3>
_GDIPlus_RegionCombinePath ( $hRegion, $hPath [, $iCombineMode = 2] )

Funkcja modyfikuje istniejący obiekt Region za pomocą ścieżki z wypełnieniem. Zwraca True gdy sukces, lub False gdy wystąpił błąd (makro @error przyjmie wartość różną od 0).

Zmodyfikowany obiekt będzie kombinacją istniejącego regionu i ścieżki z wypełnieniem.

$hRegion - uchwyt do regionu

$hPath - uchwyt ścieżki z wypełnieniem

$iCombineMode - tryb modyfikacji:

0 - nowy region opisany ścieżką zastępuje ten istniejący
1 - nowy region jest częścią wspólną istniejącego regionu i ścieżki z wypełnieniem
2 - nowy region jest sumą istniejącego regionu i ścieżki z wypełnieniem
3 - nowy region jest połączeniem XOR istniejącego regionu i ścieżki z wypełnieniem
4 - nowy region obejmuje obszar, który jest w istniejącym regionie, ale nie w ścieżce
5 - nowy region obejmuje obszar, który jest w ścieżce, ale nie jest w istniejącym regionie

Przykład:

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

;tworzenie testowego GUI
$hGUI = GUICreate(" Test Windows regions", 350, 210)
GUISetBkColor(0xff0000, $hGUI)
$btn_exit = GUICtrlCreateButton("Wyjście", 100, 150, 150)
$lab = GUICtrlCreateLabel("To jest testowe okno", 55, 40,150,85)
GUICtrlSetBkColor($lab,0xffff00)
GUISetState()

;okno normalne
Do
   $msg = GUIGetMsg()
Until $msg = $GUI_EVENT_CLOSE Or $msg = $btn_exit

_GDIPlus_Startup()

;region eliptyczny z okienkiem
$aPos = WinGetPos($hGUI)
$hPath = _GDIPlus_PathCreate() ;tworzenie ścieżki
_GDIPlus_PathAddEllipse($hPath, 10, 25, $aPos[2]-20, $aPos[3]-50)

$hPath1 = _GDIPlus_PathCreate() ;tworzenie ścieżki
_GDIPlus_PathAddRectangle($hPath1, 100, 0, $aPos[2]-200, $aPos[3])

$hPath2 = _GDIPlus_PathCreate() ;tworzenie ścież
_GDIPlus_PathAddEllipse($hPath2, $aPos[2]-230, $aPos[3]-170, 100, 100)

$hReg = _GDIPlus_RegionCreateFromPath($hPath)
_GDIPlus_RegionCombinePath($hReg, $hPath1, 3) ;łączenie typu XOR
_GDIPlus_RegionCombinePath($hReg, $hPath2, 2) ;łączenie typu XOR
$hRGN = _GDIPlus_RegionGetHRgn($hReg)
_WinAPI_SetWindowRgn($hGUI, $hRGN)

Do
   $msg = GUIGetMsg()
Until $msg = $GUI_EVENT_CLOSE Or $msg = $btn_exit

;zwolnienie zasobów
_WinAPI_DeleteObject($hRGN)
_GDIPlus_RegionDispose($hReg)
_GDIPlus_PathDispose($hPath)
_GDIPlus_PathDispose($hPath1)
_GDIPlus_PathDispose($hPath2)
_GDIPlus_Shutdown()


_GDIPlus_RegionCombineRegion

[edytuj]
#include <GDIPlus.au3>
_GDIPlus_RegionCombineRegion ( $hRegionDst, $hRegionSrc [, $iCombineMode = 2] )

Funkcja modyfikuje istniejący obiekt Region za pomocą innego regionu. Zwraca True gdy sukces, lub False gdy wystąpił błąd (makro @error przyjmie wartość różną od 0).

Zmodyfikowany obiekt będzie kombinacją dwóch regionów.

$hRegionDst - region modyfikowany

$hRegionSrc - region modyfikujący

$iCombineMode - tryb modyfikacji:

0 - region modyfikujący zastępuje region modyfikowany
1 - nowy region jest częścią wspólną istniejącego regionu modyfikowanego i modyfikującego
2 - nowy region jest sumą regionu modyfikowanego i modyfikującego
3 - nowy region jest połączeniem XOR regionu modyfikowanego i modyfikującego
4 - nowy region obejmuje obszar, który jest w regionie modyfikowanym, ale nie jest w modyfikującym
5 - nowy region obejmuje obszar, który jest w regionie modyfikującym, ale nie jest w modyfikowanym


Przykład:

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

;tworzenie testowego GUI
$hGUI = GUICreate(" Test Windows regions", 350, 210)
GUISetBkColor(0xff0000, $hGUI)
$btn_exit = GUICtrlCreateButton("Wyjście", 100, 150, 150)
$lab = GUICtrlCreateLabel("To jest testowe okno", 55, 40,150,85)
GUICtrlSetBkColor($lab,0xffff00)
GUISetState()

;okno normalne
Do
   $msg = GUIGetMsg()
Until $msg = $GUI_EVENT_CLOSE Or $msg = $btn_exit

_GDIPlus_Startup()

;region eliptyczny z okienkiem
$aPos = WinGetPos($hGUI)
$hPath = _GDIPlus_PathCreate() ;tworzenie ścieżki
_GDIPlus_PathAddEllipse($hPath, 10, 10, $aPos[2]-20, $aPos[3]-20)
$hReg = _GDIPlus_RegionCreateFromPath($hPath)
$hReg2 = _GDIPlus_RegionCreateFromRect(100, 70, $aPos[2]-200, $aPos[3]-140)
_GDIPlus_RegionCombineRegion($hReg, $hReg2, 3) ;łączenie regionów typu XOR
$hRGN = _GDIPlus_RegionGetHRgn($hReg)
_WinAPI_SetWindowRgn($hGUI, $hRGN)

Do
   $msg = GUIGetMsg()
Until $msg = $GUI_EVENT_CLOSE Or $msg = $btn_exit

;zwolnienie zasobów
_WinAPI_DeleteObject($hRGN)
_GDIPlus_RegionDispose($hReg)
_GDIPlus_RegionDispose($hReg2)
_GDIPlus_PathDispose($hPath)
_GDIPlus_Shutdown()


_GDIPlus_RegionCombineRect

[edytuj]
#include <GDIPlus.au3>
_GDIPlus_RegionCombineRect ( $hRegion, $iX, $iY, $iWidth, $iHeight [, $iCombineMode = 2] )

Funkcja modyfikuje istniejący obiekt Region za pomocą prostokątnego obszaru. Zwraca True gdy sukces, lub False gdy wystąpił błąd (makro @error przyjmie wartość różną od 0).

Zmodyfikowany obiekt będzie kombinacją istniejącego regionu i ścieżki z wypełnieniem.

$hRegion - uchwyt do regionu

$iX i $iY - współrzędne lewego górnego narożnika definiowanego regionu

$iWidth i $iHeight - szerokość i wysokość definiowanego regionu

$iCombineMode - tryb modyfikacji:

0 - nowy prostokątny region zastępuje ten istniejący
1 - nowy region jest częścią wspólną istniejącego regionu i prostokąta
2 - nowy region jest sumą istniejącego regionu i prostokąta
3 - nowy region jest połączeniem XOR istniejącego regionu i prostokąta
4 - nowy region obejmuje obszar, który jest w istniejącym regionie, ale nie w prostokącie
5 - nowy region obejmuje obszar, który jest w prostokącie, ale nie jest w istniejącym regionie

Przykład:

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

;tworzenie testowego GUI
$hGUI = GUICreate(" Test Windows regions", 350, 210)
GUISetBkColor(0xff0000, $hGUI)
$btn_exit = GUICtrlCreateButton("Wyjście", 100, 150, 150)
$lab = GUICtrlCreateLabel("To jest testowe okno", 55, 40,150,85)
GUICtrlSetBkColor($lab,0xffff00)
GUISetState()

;okno normalne
Do
   $msg = GUIGetMsg()
Until $msg = $GUI_EVENT_CLOSE Or $msg = $btn_exit

_GDIPlus_Startup()

;region eliptyczny z okienkiem
$aPos = WinGetPos($hGUI)
$hPath = _GDIPlus_PathCreate() ;tworzenie ścieżki
_GDIPlus_PathAddEllipse($hPath, 10, 10, $aPos[2]-20, $aPos[3]-20)
$hReg = _GDIPlus_RegionCreateFromPath($hPath)
_GDIPlus_RegionCombineRect($hReg, 140, 0, $aPos[2]-280, $aPos[3], 4)
$hRGN = _GDIPlus_RegionGetHRgn($hReg)
_WinAPI_SetWindowRgn($hGUI, $hRGN)

Do
   $msg = GUIGetMsg()
Until $msg = $GUI_EVENT_CLOSE Or $msg = $btn_exit

;zwolnienie zasobów
_WinAPI_DeleteObject($hRGN)
_GDIPlus_RegionDispose($hReg)
_GDIPlus_PathDispose($hPath)
_GDIPlus_Shutdown()


_GDIPlus_RegionGetBounds

[edytuj]
#include <GDIPlus.au3>
_GDIPlus_RegionGetBounds ( $hRegion, $hGraphics )

Funkcja zwraca w postaci 4-elementowej tablicy położenie i wielkość prostokąta, w którym zawiera się region. Jeżeli wystąpił błąd makro @error przyjmuje wartość różną od zera.

[0] - współrzędna X lewego górnego narożnika prostokąta
[1] - współrzędna Y lewego górnego narożnika prostokąta
[2] - szerokość prostokąta
[3] - wysokość prostokąta

$hRegion - uchwyt do regionu

$hGraphics - uchwyt do obiektu Graphics


_GDIPlus_RegionGetHRgn

[edytuj]
 #include <GDIPlus.au3>
_GDIPlus_RegionGetHRgn ( $hRegion [, $hGraphics = 0] )

Funkcja tworzy obiekt Region GDI z regionu GDI+. Zwraca uchwyt do utworzonego obiektu GDI, lub 0 gdy wystąpił błąd (makro @error przyjmie wartość różną od 0).

$hRegion - uchwyt do regionu

$hGraphics - uchwyt do obiektu Graphics


_GDIPlus_RegionTransform

[edytuj]
#include <GDIPlus.au3>
_GDIPlus_RegionTransform ( $hRegion, $hMatrix )

Funkcja modyfikuje istniejący region za pomocą obiektu Matrix. Zwraca True gdy sukces, lub False gdy wystąpił błąd (makro @error przyjmie wartość różną od 0).

$hRegion - uchwyt do regionu

$hMatrix - uchwyt do obiektu Matrix

Przykład:

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

;tworzenie testowego GUI
$hGUI = GUICreate(" Test Windows regions", 350, 210)
GUISetBkColor(0xff0000, $hGUI)
$btn_exit = GUICtrlCreateButton("Wyjście", 100, 150, 150)
$lab = GUICtrlCreateLabel("To jest testowe okno", 55, 40,150,85)
GUICtrlSetBkColor($lab,0xffff00)
GUISetState()

;okno normalne
Do
   $msg = GUIGetMsg()
Until $msg = $GUI_EVENT_CLOSE Or $msg = $btn_exit

_GDIPlus_Startup()

;region eliptyczny z okienkiem
$aPos = WinGetPos($hGUI)
$hPath = _GDIPlus_PathCreate() ;tworzenie ścieżki
_GDIPlus_PathAddEllipse($hPath, 50, 40, $aPos[2]-100, $aPos[3]-80)
$hReg = _GDIPlus_RegionCreateFromPath($hPath) ;tworzenie regionu

$hMatrix = _GDIPlus_MatrixCreate() ;tworzenie obiektu matrix
_GDIPlus_MatrixShear($hMatrix, 0.3, 0.15) ;definiowanie ścinania

_GDIPlus_RegionTransform ($hReg, $hMatrix) ;transformacja regionu

$hRGN = _GDIPlus_RegionGetHRgn($hReg)
_WinAPI_SetWindowRgn($hGUI, $hRGN) 

Do
   $msg = GUIGetMsg()
Until $msg = $GUI_EVENT_CLOSE Or $msg = $btn_exit

;zwolnienie zasobów
_WinAPI_DeleteObject($hRGN)
_GDIPlus_RegionDispose($hReg)
_GDIPlus_PathDispose($hPath)
_GDIPlus_MatrixDispose($hMatrix)
_GDIPlus_Shutdown()


_GDIPlus_RegionTranslate

[edytuj]
#include <GDIPlus.au3>
_GDIPlus_RegionTranslate ( $hRegion, $iDX, $iDY )

Funkcja przesuwa region o podaną wartość w poziomie i pionie. Zwraca True gdy sukces, lub False gdy wystąpił błąd (makro @error przyjmie wartość różną od 0).

$hRegion - uchwyt do regionu

$iDX i $iDY - wielkość przesunięcia w poziomie i pionie

Przykład:

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

;tworzenie testowego GUI
$hGUI = GUICreate(" Test Windows regions", 350, 210)
GUISetBkColor(0xff0000, $hGUI)
$btn_exit = GUICtrlCreateButton("Wyjście", 100, 150, 150)
$lab = GUICtrlCreateLabel("To jest testowe okno", 55, 40,150,85)
GUICtrlSetBkColor($lab,0xffff00)
GUISetState()

;okno normalne
Do
   $msg = GUIGetMsg()
Until $msg = $GUI_EVENT_CLOSE Or $msg = $btn_exit

_GDIPlus_Startup()

;okno z regionem
$hPath = _GDIPlus_PathCreate() ;tworzenie ścieżki
_GDIPlus_PathAddRectangle($hPath, 0, 0, 250, 150) ;dodanie prostokąta do ścieżki

$hReg = _GDIPlus_RegionCreateFromPath($hPath) ;tworzenie regionu ze ścieżki

$hReg1 = _GDIPlus_RegionClone($hReg) ;klonowanie regionu

_GDIPlus_RegionTranslate($hReg1, 100, 60) ;przesunięcie regionu

_GDIPlus_RegionCombineRegion ($hReg, $hReg1, 3) ;modyfikacja regionu

$hRGN = _GDIPlus_RegionGetHRgn($hReg) ;zmiana regionu GDI+ na GDI

_WinAPI_SetWindowRgn($hGUI, $hRGN) ;aktywacja regionu

Do
   $msg = GUIGetMsg()
Until $msg = $GUI_EVENT_CLOSE Or $msg = $btn_exit

;zwolnienie zasobów
_WinAPI_DeleteObject($hRGN)
_GDIPlus_RegionDispose($hReg)
_GDIPlus_RegionDispose($hReg1)
_GDIPlus_PathDispose($hPath)
_GDIPlus_Shutdown()

Tworzenie grafiki

[edytuj]

Wstawianie tekstów

[edytuj]

_GDIPlus_GraphicsDrawString

[edytuj]
#include <GDIPlus.au3>
_GDIPlus_GraphicsDrawString($hGraphics, $sString, $nX, $nY [, $sFont = "Arial" [, $fSize = 10 [, $iFormat = 0]]])

Funkcja wstawia tekst w obszarze rysowania. Zwraca TRUE gdy sukces, lub FALSE gdy wystąpił błąd.

$hGraphics - uchwyt do obiektu zwracany przez _GDIPlus_GraphicsCreateFromHWND lub _GDIPlus_GraphicsCreateFromHWDC

$sString - tekst do wstawienia

$nX i $nY - współrzędne początku wprowadzanego tekstu

$sFont - nazwa fontu jak w systemie, np. "arial", "courier" itp

$fSize - wielkość fontu

$iFormat - kod formatu (np. 0 - tekst wpisywany w prawo (domyślne), 1 - tekst wpisywany w lewo, 2 - tekst wpisywany w pionie)

Przykład:

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

;tworzenie GUI
$hGUI = GUICreate("GDI+", 400, 400)
GUISetState()

;tworzenie zasobów
_GDIPlus_Startup()
$hGraphic = _GDIPlus_GraphicsCreateFromHWND($hGUI)

;wpisanie tekstu
_GDIPlus_GraphicsDrawString($hGraphic, "Witajcie!", 200, 100, "courier", 20)
Sleep(1000)
_GDIPlus_GraphicsDrawString($hGraphic, "Witajcie!", 200, 100, "arial black", 28, 1)
Sleep(1000)
_GDIPlus_GraphicsDrawString($hGraphic, "Witajcie!", 200, 100, "arial", 36, 2)

Do
Until GUIGetMsg() = $GUI_EVENT_CLOSE

;zwolnienie zasobów
_GDIPlus_GraphicsDispose($hGraphic)
_GDIPlus_Shutdown()


_GDIPlus_GraphicsDrawStringEx

[edytuj]
#include <GDIPlus.au3>
_GDIPlus_GraphicsDrawStringEx($hGraphics, $sString, $hFont, $tLayout, $hFormat, $hBrush)

Funkcja wstawia tekst w obszarze rysowania. Zwraca TRUE gdy sukces, lub FALSE gdy wystąpił błąd.

$hGraphics - uchwyt do obiektu zwracany przez _GDIPlus_GraphicsCreateFromHWND lub _GDIPlus_GraphicsCreateFromHWDC

$sString - tekst do wstawienia

$hFont - uchwyt do fontu, którym ma być wypisany tekst, zwracany przez _GDIPlus_FontCreate

$tLayout - struktura z danymi położenia i wielkości pola tekstowego, zwracana przez _GDIPlus_RectFCreate

$hFormat - uchwyt do formatu stringu, zwracany przez _GDIPlus_StringFormatCreate

$hBrush - uchwyt do pędzla, którym będzie wpisywany tekst, zwracany przez _GDIPlus_BrushCreateSolid

Funkcja jest rozszerzoną wersją funkcji _GDIPlus_GraphicsDrawString. Wymaga wprawdzie zdefiniowania kilku dodatkowych elementów, ale umożliwia o wiele większą kontrolę nad wprowadzanym tekstem.

Przykład:

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

;tworzenie GUI
$hGUI = GUICreate("GDI+", 400, 300)
GUISetState()

;tworzenie zasobów
_GDIPlus_Startup()
$hGraphic = _GDIPlus_GraphicsCreateFromHWND($hGUI)
$hFormat = _GDIPlus_StringFormatCreate()

$hBrush = _GDIPlus_BrushCreateSolid(0xAA0000FF)
$hFamily = _GDIPlus_FontFamilyCreate("courier")
$hFont = _GDIPlus_FontCreate($hFamily, 24, 0, 0)
$tLayout = _GDIPlus_RectFCreate(140, 80, 150, 50)

$hBrush1 = _GDIPlus_BrushCreateSolid(0xFFFF0000)
$hFamily1 = _GDIPlus_FontFamilyCreate("arial")
$hFont1 = _GDIPlus_FontCreate($hFamily1, 40, 7, 0)
$tLayout1 = _GDIPlus_RectFCreate(140, 180, 150, 50)

;wpisanie tekstu
_GDIPlus_GraphicsDrawStringEx($hGraphic, "Cześć!", $hFont, $tLayout, $hFormat, $hBrush)
_GDIPlus_GraphicsDrawStringEx($hGraphic, "Cześć!", $hFont1, $tLayout1, $hFormat, $hBrush1)


Do
Until GUIGetMsg() = $GUI_EVENT_CLOSE

;zwolnienie zasobów
_GDIPlus_FontDispose($hFont)
_GDIPlus_FontFamilyDispose($hFamily)
_GDIPlus_StringFormatDispose($hFormat)
_GDIPlus_BrushDispose($hBrush)
_GDIPlus_FontDispose($hFont1)
_GDIPlus_FontFamilyDispose($hFamily1)
_GDIPlus_BrushDispose($hBrush1)
_GDIPlus_GraphicsDispose($hGraphic)
_GDIPlus_Shutdown()


Rysowanie

[edytuj]

Zbiór funkcji rysujących różne figury geometryczne.


_GDIPlus_GraphicsDrawArc

[edytuj]
#include <GDIPlus.au3>
_GDIPlus_GraphicsDrawArc($hGraphics, $iX, $iY, $iWidth, $iHeight, $fStartAngle, $fSweepAngle [, $hPen = 0])

Funkcja rysuje łuk elipsy. Zwraca TRUE gdy sukces, lub FALSE gdy wystąpił błąd.

$hGraphics - uchwyt do obiektu zwracany przez _GDIPlus_GraphicsCreateFromHWND lub _GDIPlus_GraphicsCreateFromHWDC

$iX, $iY - współrzędna lewego górnego rogu prostokąta ograniczającego elipsę, której łuk ma być narysowany

'$iWidth, $iHeight - długość i wysokość prostokąta ograniczającego elipsę

$fStartAngle - kąt pomiędzy osią X i punkt początkowy łuku, wierzchołek kąta w środku elipsy

$fSweepAngle - kąt pomiędzy punktem początkowym i końcowym łuku

$hPen - uchwyt do pióra, którym będzie rysowany łuk, domyślna wartość 0 oznacza ciągłą linię o grubości 1 i kolorze czarnym

Przykład:

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

;tworzenie GUI
$hGUI = GUICreate("GDI+", 400, 300)
GUISetState()

_GDIPlus_Startup()
$hGraphic = _GDIPlus_GraphicsCreateFromHWND($hGUI)

;rysowanie łuku domyślnym piórem
;przy takich parametrach, łuk będzie pełnym okręgiem
_GDIPlus_GraphicsDrawArc($hGraphic, 160, 100, 100, 100, 0, 360)

$hPen = _GDIPlus_PenCreate(0xFFFF0000, 2) ;tworzenie pióra
_GDIPlus_GraphicsDrawArc($hGraphic, 110, 160, 200, 100, 120, 90, $hPen)
_GDIPlus_PenSetColor($hPen, 0xFF0000FF) ;zmiana koloru pióra
_GDIPlus_GraphicsDrawArc($hGraphic, 210, 30, 120, 250, 220, 290, $hPen)
_GDIPlus_PenSetDashStyle($hPen, 4) ;zmiana rodzaju linii na przerywaną
_GDIPlus_GraphicsDrawArc($hGraphic, 50, 20, 80, 100, 200, 190, $hPen)

Do
Until GUIGetMsg() = $GUI_EVENT_CLOSE

;zwolnienie zasobów
_GDIPlus_PenDispose($hPen)
_GDIPlus_GraphicsDispose($hGraphic)
_GDIPlus_Shutdown()


_GDIPlus_GraphicsDrawBezier

[edytuj]
#include <GDIPlus.au3>
_GDIPlus_GraphicsDrawBezier($hGraphics, $iX1, $iY1, $iX2, $iY2, $iX3, $iY3, $iX4, $iY4 [, $hPen = 0])

Funkcja rysuje krzywą Beziera. Zwraca TRUE gdy sukces, lub FALSE gdy wystąpił błąd.

$hGraphics - uchwyt do obiektu zwracany przez _GDIPlus_GraphicsCreateFromHWND lub _GDIPlus_GraphicsCreateFromHWDC

$iX1, $iY1 - współrzędne początku krzywej

$iX2, $iY2 - współrzędne pierwszego punktu kontrolnego

$iX3, $iY3 - współrzędne drugiego punktu kontrolnego

$iX4, $iY4 - współrzędne końca krzywej

$hPen - uchwyt do pióra, którym będzie rysowana krzywa, domyślna wartość 0 oznacza ciągłą linię o grubości 1 i kolorze czarnym

Przykład:

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

;tworzenie GUI
$hGUI = GUICreate("GDI+", 400, 300)
GUISetState()

_GDIPlus_Startup()
$hGraphic = _GDIPlus_GraphicsCreateFromHWND($hGUI)

;rysowanie krzywej Beziera
_GDIPlus_GraphicsDrawBezier($hGraphic, 50, 150, 100, 5, 125, 325, 350, 130)

Do
Until GUIGetMsg() = $GUI_EVENT_CLOSE

;zwolnienie zasobów
_GDIPlus_GraphicsDispose($hGraphic)
_GDIPlus_Shutdown()


_GDIPlus_GraphicsDrawCurve

[edytuj]
#include <GDIPlus.au3>
_GDIPlus_GraphicsDrawCurve($hGraphics, $aPoints [, $hPen = 0])

Funkcja rysuje krzywą. Zwraca TRUE gdy sukces, lub FALSE gdy wystąpił błąd.

$hGraphics - uchwyt do obiektu zwracany przez _GDIPlus_GraphicsCreateFromHWND lub _GDIPlus_GraphicsCreateFromHWDC

$aPoints - dwuwymiarowa tablica z danymi punktów, przez które ma przejść krzywa

[0][0] - ilość punktów
[1][0] - punkt 1, współrzędna X
[1][1] - punkt 1, współrzędna Y
[2][0] - punkt 2, współrzędna X
[2][1] - punkt 2, współrzędna y
          ...
[n][0] - punkt n-ty, współrzędna X
[n][1] - punkt n-ty, współrzędna y

$hPen - uchwyt do pióra, którym będzie rysowana krzywa, domyślna wartość 0 oznacza ciągłą linię o grubości 1 i kolorze czarnym

Przykład:

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

;tworzenie GUI
$hGUI = GUICreate("GDI+", 400, 300)
GUISetState()

_GDIPlus_Startup()
$hGraphic = _GDIPlus_GraphicsCreateFromHWND($hGUI)

;rysowanie krzywej
Dim $aPoints[5][2] = [[4, 0],[10, 50],[100, 100],[190, 50],[280, 120]]
_GDIPlus_GraphicsDrawCurve($hGraphic, $aPoints)

Do
Until GUIGetMsg() = $GUI_EVENT_CLOSE

;zwolnienie zasobów
_GDIPlus_GraphicsDispose($hGraphic)
_GDIPlus_Shutdown()


_GDIPlus_GraphicsDrawClosedCurve

[edytuj]
#include <GDIPlus.au3>
_GDIPlus_GraphicsDrawClosedCurve($hGraphics, $aPoints [, $hPen = 0])

Funkcja rysuje krzywą zamkniętą. Zwraca TRUE gdy sukces, lub FALSE gdy wystąpił błąd.

$hGraphics - uchwyt do obiektu zwracany przez _GDIPlus_GraphicsCreateFromHWND lub _GDIPlus_GraphicsCreateFromHWDC

$aPoints - dwuwymiarowa tablica z danymi punktów, przez które ma przejść krzywa

[0][0] - ilość punktów
[1][0] - punkt 1, współrzędna X
[1][1] - punkt 1, współrzędna Y
[2][0] - punkt 2, współrzędna X
[2][1] - punkt 2, współrzędna y
          ...
[n][0] - punkt n-ty, współrzędna X
[n][1] - punkt n-ty, współrzędna y

$hPen - uchwyt do pióra, którym będzie rysowana krzywa, domyślna wartość 0 oznacza ciągłą linię o grubości 1 i kolorze czarnym

Od _GDIPlus_GraphicsDrawCurve różni się tym, że ostatni punkt krzywej zostaje połączony z pierwszym.

Przykład:

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

;tworzenie GUI
$hGUI = GUICreate("GDI+", 400, 300)
GUISetState()

_GDIPlus_Startup()
$hGraphic = _GDIPlus_GraphicsCreateFromHWND($hGUI)

;rysowanie krzywej
Dim $aPoints[5][2] = [[4, 0],[10, 50],[100, 100],[190, 50],[280, 120]]
_GDIPlus_GraphicsDrawClosedCurve($hGraphic, $aPoints)

Do
Until GUIGetMsg() = $GUI_EVENT_CLOSE

;zwolnienie zasobów
_GDIPlus_GraphicsDispose($hGraphic)
_GDIPlus_Shutdown()


_GDIPlus_GraphicsDrawEllipse

[edytuj]
#include <GDIPlus.au3>
_GDIPlus_GraphicsDrawEllipse($hGraphics, $iX, $iY, $iWidth, $iHeight [, $hPen = 0])

Funkcja rysuje elipsę. Zwraca TRUE gdy sukces, lub FALSE gdy wystąpił błąd.

$hGraphics - uchwyt do obiektu zwracany przez _GDIPlus_GraphicsCreateFromHWND lub _GDIPlus_GraphicsCreateFromHWDC

$iX, $iY - współrzędna lewego górnego rogu prostokąta ograniczającego elipsę, której łuk ma być narysowany

$iWidth, $iHeight - długość i wysokość prostokąta ograniczającego elipsę, dla $iWidth = $iHeight zostanie narysowany okrąg

$hPen - uchwyt do pióra, którym będzie rysowana elipsa, domyślna wartość 0 oznacza ciągłą linię o grubości 1 i kolorze czarnym

Przykład:

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

;tworzenie GUI
$hGUI = GUICreate("GDI+", 400, 300)
GUISetState()

_GDIPlus_Startup()
$hGraphic = _GDIPlus_GraphicsCreateFromHWND($hGUI)

;rysowanie elipsy domyślnym piórem
;przy takich parametrach elipsa jest okręgiem
_GDIPlus_GraphicsDrawEllipse($hGraphic, 160, 100, 100, 100)

$hPen = _GDIPlus_PenCreate(0xFFFF0000, 2) ;tworzenie pióra
_GDIPlus_GraphicsDrawEllipse($hGraphic, 210, 30, 120, 250, $hPen)
_GDIPlus_PenSetDashStyle($hPen, 2) ;zmiana rodzaju linii na przerywaną
_GDIPlus_GraphicsDrawEllipse($hGraphic, 50, 20, 100, 70, $hPen)

Do
Until GUIGetMsg() = $GUI_EVENT_CLOSE

;zwolnienie zasobów
_GDIPlus_PenDispose($hPen)
_GDIPlus_GraphicsDispose($hGraphic)
_GDIPlus_Shutdown()


_GDIPlus_GraphicsDrawLine

[edytuj]
#include <GDIPlus.au3>
_GDIPlus_GraphicsDrawLine($hGraphics, $iX1, $iY1, $iX2, $iY2 [, $hPen = 0])

Funkcja rysuje odcinek linii prostej. Zwraca TRUE gdy sukces, lub FALSE gdy wystąpił błąd.

$hGraphics - uchwyt do obiektu zwracany przez _GDIPlus_GraphicsCreateFromHWND lub _GDIPlus_GraphicsCreateFromHWDC

$iX1, $iY1, $iX2, $iY2 - współrzędne początku i końca rysowanego odcinka

$hPen - uchwyt do pióra, którym będzie rysowany odcinek, domyślna wartość 0 oznacza ciągłą linię o grubości 1 i kolorze czarnym

Przykład:

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

;tworzenie GUI
$hGUI = GUICreate("GDI+", 400, 300)
GUISetState()

_GDIPlus_Startup()
$hGraphic = _GDIPlus_GraphicsCreateFromHWND($hGUI)

;rysowanie linii domyślnym piórem
_GDIPlus_GraphicsDrawLine($hGraphic, 10, 150, 390, 150)

$hPen = _GDIPlus_PenCreate(0xFFFF0000, 3) ;tworzenie pióra
_GDIPlus_GraphicsDrawLine($hGraphic, 10, 150, 390, 250, $hPen)
_GDIPlus_PenSetColor($hPen, 0xFF0000FF) ;zmiana koloru pióra
_GDIPlus_GraphicsDrawLine($hGraphic, 100, 50, 390, 250, $hPen)
_GDIPlus_PenSetDashStyle($hPen, 1) ;zmiana rodzaju linii na przerywaną
_GDIPlus_GraphicsDrawLine($hGraphic, 100, 50, 390, 150, $hPen)

Do
Until GUIGetMsg() = $GUI_EVENT_CLOSE

;zwolnienie zasobów
_GDIPlus_PenDispose($hPen)
_GDIPlus_GraphicsDispose($hGraphic)
_GDIPlus_Shutdown()


_GDIPlus_GraphicsDrawPath

[edytuj]
#include <GDIPlus.au3>
_GDIPlus_GraphicsDrawPath ( $hGraphics, $hPath [, $hPen = 0] )

Funkcja rysuje ścieżkę. Zwraca TRUE gdy sukces, lub FALSE gdy wystąpił błąd.

$hGraphics - uchwyt do obiektu zwracany przez _GDIPlus_GraphicsCreateFromHWND lub _GDIPlus_GraphicsCreateFromHWDC

$hPath - uchwyt do ścieżki

$hPen - uchwyt do pióra, którym będzie rysowana ścieżka, domyślna wartość 0 oznacza ciągłą linię o grubości 1 i kolorze czarnym

Przykład:

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

;tworzenie GUI
$hGUI = GUICreate("GDI+", 280, 190)
GUISetState(@SW_SHOW)
_GDIPlus_Startup()

;tworzenie obiektu graficznego i zasobów
$hGraphic = _GDIPlus_GraphicsCreateFromHWND($hGUI)
_GDIPlus_GraphicsClear($hGraphic, 0xFF000000)
$hPen = _GDIPlus_PenCreate(0xFFFFFFFF, 2)
$hPath = _GDIPlus_PathCreate()

;tworzenie i rysowanie ścieżki
_GDIPlus_PathAddEllipse($hPath, 10,10, 100, 100)
_GDIPlus_PathAddEllipse($hPath, 90,10, 100, 100)
_GDIPlus_PathAddEllipse($hPath, 170,10, 100, 100)
_GDIPlus_PathAddEllipse($hPath, 50,80, 100, 100)
_GDIPlus_PathAddEllipse($hPath, 130,80, 100, 100)
_GDIPlus_GraphicsDrawPath($hGraphic, $hPath, $hPen)

Do
Until GUIGetMsg() = $GUI_EVENT_CLOSE

;zwolnienie zasobów
_GDIPlus_PathDispose($hPath)
_GDIPlus_PenDispose($hPen)
_GDIPlus_GraphicsDispose($hGraphic)
_GDIPlus_Shutdown()


_GDIPlus_GraphicsDrawPie

[edytuj]
#include <GDIPlus.au3>
_GDIPlus_GraphicsDrawPie($hGraphics, $iX, $iY, $iWidth, $iHeight, $fStartAngle, $fSweepAngle [, $hPen = 0])

Funkcja rysuje wycinek elipsy (bez wypełnienia). Zwraca TRUE gdy sukces, lub FALSE gdy wystąpił błąd.

$hGraphics - uchwyt do obiektu zwracany przez _GDIPlus_GraphicsCreateFromHWND lub _GDIPlus_GraphicsCreateFromHWDC

$iX, $iY - współrzędna lewego górnego rogu prostokąta ograniczającego elipsę, której łuk ma być narysowany

'$iWidth, $iHeight - długość i wysokość prostokąta ograniczającego elipsę

$fStartAngle - kąt pomiędzy osią X i punkt początkowy łuku, wierzchołek kąta w środku elipsy

$fSweepAngle - kąt pomiędzy punktem początkowym i końcowym łuku

$hPen - uchwyt do pióra, którym będzie rysowany wycinek, domyślna wartość 0 oznacza ciągłą linię o grubości 1 i kolorze czarnym

Przykład:

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

;tworzenie GUI
$hGUI = GUICreate("GDI+", 400, 300)
GUISetState()

_GDIPlus_Startup()
$hGraphic = _GDIPlus_GraphicsCreateFromHWND($hGUI)

;rysowanie wycinka elipsy domyślnym piórem
_GDIPlus_GraphicsDrawPie($hGraphic, 80, 10, 100, 180, 45, 150)

$hPen = _GDIPlus_PenCreate(0xFFFF0000, 2) ;tworzenie pióra
_GDIPlus_GraphicsDrawPie($hGraphic, 110, 30, 250, 100, 0, 120, $hPen)

Do
Until GUIGetMsg() = $GUI_EVENT_CLOSE

;zwolnienie zasobów
_GDIPlus_PenDispose($hPen)
_GDIPlus_GraphicsDispose($hGraphic)
_GDIPlus_Shutdown()


_GDIPlus_GraphicsDrawPolygon

[edytuj]
#include <GDIPlus.au3>
_GDIPlus_GraphicsDrawPolygon($hGraphics, $aPoints [, $hPen = 0])

Funkcja rysuje wielokąt (bez wypełnienia). Zwraca TRUE gdy sukces, lub FALSE gdy wystąpił błąd.

$hGraphics - uchwyt do obiektu zwracany przez _GDIPlus_GraphicsCreateFromHWND lub _GDIPlus_GraphicsCreateFromHWDC

$aPoints - dwuwymiarowa tablica z danymi punktów, będących wierzchołkami wielokąta

[0][0] - ilość punktów
[1][0] - punkt 1, współrzędna X
[1][1] - punkt 1, współrzędna Y
[2][0] - punkt 2, współrzędna X
[2][1] - punkt 2, współrzędna y
          ...
[n][0] - punkt n-ty, współrzędna X
[n][1] - punkt n-ty, współrzędna y

$hPen - uchwyt do pióra, którym będzie rysowany wielokąt, domyślna wartość 0 oznacza ciągłą linię o grubości 1 i kolorze czarnym

Przykład:

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

;tworzenie GUI
$hGUI = GUICreate("GDI+", 400, 300)
GUISetState()

_GDIPlus_Startup()
$hGraphic = _GDIPlus_GraphicsCreateFromHWND($hGUI)

;rysowanie wielokąta
Dim $aPoints[5][2] = [[4, 0],[10, 50],[100, 100],[190, 250],[280, 120]]
_GDIPlus_GraphicsDrawPolygon($hGraphic, $aPoints)

Do
Until GUIGetMsg() = $GUI_EVENT_CLOSE

;zwolnienie zasobów
_GDIPlus_GraphicsDispose($hGraphic)
_GDIPlus_Shutdown()


_GDIPlus_GraphicsDrawRect

[edytuj]
#include <GDIPlus.au3>
_GDIPlus_GraphicsDrawRect($hGraphics, $iX, $iY, $iWidth, $iHeight [, $hPen = 0])

Funkcja rysuje prostokąt. Zwraca TRUE gdy sukces, lub FALSE gdy wystąpił błąd.

$hGraphics - uchwyt do obiektu zwracany przez _GDIPlus_GraphicsCreateFromHWND lub _GDIPlus_GraphicsCreateFromHWDC

$iX, $iY - współrzędna lewego górnego rogu prostokąta ograniczającego elipsę, której łuk ma być narysowany

'$iWidth, $iHeight - długość i wysokość prostokąta

$hPen - uchwyt do pióra, którym będzie rysowany prostokąt, domyślna wartość 0 oznacza ciągłą linię o grubości 1 i kolorze czarnym

Przykład:

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

;tworzenie GUI
$hGUI = GUICreate("GDI+", 400, 300)
GUISetState()

_GDIPlus_Startup()
$hGraphic = _GDIPlus_GraphicsCreateFromHWND($hGUI)

;rysowanie prostokąta
 _GDIPlus_GraphicsDrawRect($hGraphic, 100, 100, 100, 150)
Do
Until GUIGetMsg() = $GUI_EVENT_CLOSE

;zwolnienie zasobów
_GDIPlus_GraphicsDispose($hGraphic)
_GDIPlus_Shutdown()

_GDIPlus_GraphicsFillClosedCurve

[edytuj]
#include <GDIPlus.au3>
_GDIPlus_GraphicsFillClosedCurve($hGraphics, $aPoints [, $hBrush = 0])

Funkcja rysuje krzywą zamkniętą z wypełnieniem. Zwraca TRUE gdy sukces, lub FALSE gdy wystąpił błąd.

$hGraphics - uchwyt do obiektu zwracany przez _GDIPlus_GraphicsCreateFromHWND lub _GDIPlus_GraphicsCreateFromHWDC

$aPoints - dwuwymiarowa tablica z danymi punktów, przez które ma przejść krzywa

[0][0] - ilość punktów
[1][0] - punkt 1, współrzędna X
[1][1] - punkt 1, współrzędna Y
[2][0] - punkt 2, współrzędna X
[2][1] - punkt 2, współrzędna y
          ...
[n][0] - punkt n-ty, współrzędna X
[n][1] - punkt n-ty, współrzędna y

$hBrush - uchwyt do pędzla, którym będzie zamalowane wnętrze krzywej, domyślna wartość 0 kolor czarny

Przykład:

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

;tworzenie GUI
$hGUI = GUICreate("GDI+", 400, 300)
GUISetState()

_GDIPlus_Startup()
$hGraphic = _GDIPlus_GraphicsCreateFromHWND($hGUI)

;rysowanie krzywej z wypełnieniem
Dim $aPoints[5][2] = [[4, 0],[10, 50],[100, 100],[190, 50],[280, 120]]
_GDIPlus_GraphicsFillclosedCurve($hGraphic, $aPoints)

;tworzenie pędzla z przezroczystym kolorem
$hbrush = _GDIPlus_BrushCreateSolid(0xC0FF0000)
Dim $aPoints1[5][2] = [[4, 0],[10, 20],[100, 100],[190, 250],[280, 120]]
_GDIPlus_GraphicsFillclosedCurve($hGraphic, $aPoints1, $hBrush)

Do
Until GUIGetMsg() = $GUI_EVENT_CLOSE

;zwolnienie zasobów
_GDIPlus_BrushDispose($hBrush)
_GDIPlus_GraphicsDispose($hGraphic)
_GDIPlus_Shutdown()


_GDIPlus_GraphicsFillEllipse

[edytuj]
#include <GDIPlus.au3>
_GDIPlus_GraphicsFillEllipse($hGraphics, $iX, $iY, $iWidth, $iHeight [, $hBrush = 0])

Funkcja rysuje elipsę z wypełnieniem. Zwraca TRUE gdy sukces, lub FALSE gdy wystąpił błąd.

$hGraphics - uchwyt do obiektu zwracany przez _GDIPlus_GraphicsCreateFromHWND lub _GDIPlus_GraphicsCreateFromHWDC

$iX, $iY - współrzędna lewego górnego rogu prostokąta ograniczającego elipsę, której łuk ma być narysowany

$iWidth, $iHeight - długość i wysokość prostokąta ograniczającego elipsę, dla $iWidth = $iHeight zostanie narysowane koło

$hBrush - uchwyt do pędzla, którym będzie zamalowana elipsa, domyślna wartość 0 oznacza kolor czarny

Przykład:

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

;tworzenie GUI
$hGUI = GUICreate("GDI+", 400, 300)
GUISetState()

_GDIPlus_Startup()
$hGraphic = _GDIPlus_GraphicsCreateFromHWND($hGUI)

;rysowanie elipsy domyślnym pędzlem
_GDIPlus_GraphicsfillEllipse($hGraphic, 160, 100, 150, 100)

$hBrush = _GDIPlus_BrushCreateSolid(0xB0FF0000) ;tworzenie pędzla
_GDIPlus_GraphicsFillEllipse($hGraphic, 210, 30, 120, 250, $hBrush)

Do
Until GUIGetMsg() = $GUI_EVENT_CLOSE

;zwolnienie zasobów
_GDIPlus_BrushDispose($hBrush)
_GDIPlus_GraphicsDispose($hGraphic)
_GDIPlus_Shutdown()


_GDIPlus_GraphicsFillPath

[edytuj]
#include <GDIPlus.au3>
_GDIPlus_GraphicsFillPath ( $hGraphics, $hPath [, $hBrush = 0] )

Funkcja zamalowuje ścieżkę. Zwraca TRUE gdy sukces, lub FALSE gdy wystąpił błąd.

$hGraphics - uchwyt do obiektu zwracany przez _GDIPlus_GraphicsCreateFromHWND lub _GDIPlus_GraphicsCreateFromHWDC

$hPath - uchwyt do ścieżki

$hBrush - uchwyt do pędzla, którym będzie zamalowana ścieżka, domyślna wartość 0 oznacza kolor czarny

Przykład:

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

;tworzenie GUI
$hGUI = GUICreate("_GDIPlus_PathAddRectangle", 400, 340)
GUISetState(@SW_SHOW)
_GDIPlus_Startup()

;tworzenie obiektu graficznego i zasobów
$hGraphic = _GDIPlus_GraphicsCreateFromHWND($hGUI)
$hBrush = _GDIPlus_BrushCreateSolid(0xFFFF0000)

;tworzenie i definiowanie ścieżki
$hPath = _GDIPlus_PathCreate()
_GDIPlus_PathAddRectangle($hPath, 50, 140, 300, 50)
_GDIPlus_PathAddEllipse($hPath, 160, 50, 80, 80)
_GDIPlus_PathAddEllipse($hPath, 160, 200, 80, 80)

_GDIPlus_GraphicsFillPath($hGraphic, $hPath, $hBrush) ;wypełnienie ścieżki

Do
Until GUIGetMsg() = $GUI_EVENT_CLOSE

;zwolnienie zasobów
_GDIPlus_PathDispose($hPath)
_GDIPlus_BrushDispose($hBrush)
_GDIPlus_GraphicsDispose($hGraphic)
_GDIPlus_Shutdown()


_GDIPlus_GraphicsFillPie

[edytuj]
#include <GDIPlus.au3>
_GDIPlus_GraphicsFillPie($hGraphics, $iX, $iY, $iWidth, $iHeight, $fStartAngle, $fSweepAngle [, $hBrush = 0])

Funkcja rysuje wycinek elipsy z wypełnieniem. Zwraca TRUE gdy sukces, lub FALSE gdy wystąpił błąd.

$hGraphics - uchwyt do obiektu zwracany przez _GDIPlus_GraphicsCreateFromHWND lub _GDIPlus_GraphicsCreateFromHWDC

$iX, $iY - współrzędna lewego górnego rogu prostokąta ograniczającego elipsę, której łuk ma być narysowany

'$iWidth, $iHeight - długość i wysokość prostokąta ograniczającego elipsę

$fStartAngle - kąt pomiędzy osią X i punkt początkowy łuku, wierzchołek kąta w środku elipsy

$fSweepAngle - kąt pomiędzy punktem początkowym i końcowym łuku

$hBrush - uchwyt do pędzla, którym będzie zamalowana elipsa, domyślna wartość 0 oznacza kolor czarny

Przykład:

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

;tworzenie GUI
$hGUI = GUICreate("GDI+", 400, 300)
GUISetState()

_GDIPlus_Startup()
$hGraphic = _GDIPlus_GraphicsCreateFromHWND($hGUI)

;rysowanie wycinka elipsy domyślnym pędzlem
_GDIPlus_GraphicsFillPie($hGraphic, 80, 10, 100, 180, 45, 150)

$hBrush = _GDIPlus_BrushCreateSolid(0xFF0000FF) ;tworzenie pędzla
_GDIPlus_GraphicsFillPie($hGraphic, 110, 30, 250, 100, 0, 120, $hBrush)

Do
Until GUIGetMsg() = $GUI_EVENT_CLOSE

;zwolnienie zasobów
_GDIPlus_BrushDispose($hBrush)
_GDIPlus_GraphicsDispose($hGraphic)
_GDIPlus_Shutdown()


_GDIPlus_GraphicsFillPolygon

[edytuj]
#include <GDIPlus.au3>
_GDIPlus_GraphicsFillPolygon($hGraphics, $aPoints [, $hBrush = 0])

Funkcja rysuje wielokąt z wypełnieniem. Zwraca TRUE gdy sukces, lub FALSE gdy wystąpił błąd.

$hGraphics - uchwyt do obiektu zwracany przez _GDIPlus_GraphicsCreateFromHWND lub _GDIPlus_GraphicsCreateFromHWDC

$aPoints - dwuwymiarowa tablica z danymi punktów, będących wierzchołkami wielokąta

[0][0] - ilość punktów
[1][0] - punkt 1, współrzędna X
[1][1] - punkt 1, współrzędna Y
[2][0] - punkt 2, współrzędna X
[2][1] - punkt 2, współrzędna y
          ...
[n][0] - punkt n-ty, współrzędna X
[n][1] - punkt n-ty, współrzędna y

$hBrush - uchwyt do pędzla, którym będzie zamalowany wielokąt, domyślna wartość 0 oznacza kolor czarny

Przykład:

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

;tworzenie GUI
$hGUI = GUICreate("GDI+", 400, 300)
GUISetState()

_GDIPlus_Startup()
$hGraphic = _GDIPlus_GraphicsCreateFromHWND($hGUI)

;rysowanie wielokąta
Dim $aPoints[5][2] = [[4, 0],[10, 50],[100, 100],[190, 250],[280, 120]]
_GDIPlus_GraphicsFillPolygon($hGraphic, $aPoints)

Do
Until GUIGetMsg() = $GUI_EVENT_CLOSE

;zwolnienie zasobów
_GDIPlus_GraphicsDispose($hGraphic)
_GDIPlus_Shutdown()


_GDIPlus_GraphicsFillRect

[edytuj]
#include <GDIPlus.au3>
_GDIPlus_GraphicsFillRect($hGraphics, $iX, $iY, $iWidth, $iHeight [, $hBrush = 0])

Funkcja rysuje prostokąt z wypełnieniem. Zwraca TRUE gdy sukces, lub FALSE gdy wystąpił błąd.

$hGraphics - uchwyt do obiektu zwracany przez _GDIPlus_GraphicsCreateFromHWND lub _GDIPlus_GraphicsCreateFromHWDC

$iX, $iY - współrzędna lewego górnego rogu prostokąta

'$iWidth, $iHeight - długość i wysokość prostokąta

$hBrush - uchwyt do pędzla, którym będzie zamalowany prostokąt, domyślna wartość 0 oznacza kolor czarny

Przykład:

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

;tworzenie GUI
$hGUI = GUICreate("GDI+", 400, 300)
GUISetState()

_GDIPlus_Startup()
$hGraphic = _GDIPlus_GraphicsCreateFromHWND($hGUI)


;tworzenie pędzli i rysowanie prostokątów
$hbrush = _GDIPlus_BrushCreateSolid(0xFFFF0000)
 _GDIPlus_GraphicsFillRect($hGraphic, 100, 50, 100, 150, $hBrush)

 $hbrush = _GDIPlus_BrushCreateSolid(0x800000FF)
 _GDIPlus_GraphicsFillRect($hGraphic, 150, 50, 100, 150, $hBrush)

 $hbrush = _GDIPlus_BrushCreateSolid(0x8000FF00)
 _GDIPlus_GraphicsFillRect($hGraphic, 125, 100, 100, 150, $hBrush)

Do
Until GUIGetMsg() = $GUI_EVENT_CLOSE

;zwolnienie zasobów
_GDIPlus_BrushDispose($hBrush)
_GDIPlus_GraphicsDispose($hGraphic)
_GDIPlus_Shutdown()


_GDIPlus_GraphicsFillRegion

[edytuj]
#include <GDIPlus.au3>
_GDIPlus_GraphicsFillRegion ( $hGraphics, $hRegion [, $hBrush = 0] )

Funkcja zamalowuje obszar wcześniej zdefiniowanego regionu. Zwraca TRUE gdy sukces, lub FALSE gdy wystąpił błąd.

'$hGraphics - uchwyt do obiektu zwracany przez _GDIPlus_GraphicsCreateFromHWND lub _GDIPlus_GraphicsCreateFromHWDC

$hRegion - uchwyt do regionu

$hBrush - uchwyt do pędzla, którym region zostanie zamalowany

Przykład:

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

;tworzenie testowego GUI
$hGUI = GUICreate(" Test Windows regions", 350, 210)
GUISetBkColor(0xff0000, $hGUI)
$btn_exit = GUICtrlCreateButton("Wyjście", 100, 150, 150)
$lab = GUICtrlCreateLabel("To jest testowe okno", 55, 40,150,85)
GUICtrlSetBkColor($lab,0xffff00)
GUISetState()

;okno normalne
Do
   $msg = GUIGetMsg()
Until $msg = $GUI_EVENT_CLOSE Or $msg = $btn_exit

_GDIPlus_Startup()

$aPos = WinGetPos($hGUI)

$hGraphic = _GDIPlus_GraphicsCreateFromHWND($hGUI)

$hBrush = _GDIPlus_BrushCreateSolid(0x7F8800AA)

;tworzenie regionów
$hRegion1 = _GDIPlus_RegionCreateFromRect(140, 0, 70, $aPos[3])
$hRegion2 = _GDIPlus_RegionCreateFromRect(0, 80, $aPos[2], $aPos[3]-160)

;zamalowanie regionów
_GDIPlus_GraphicsFillRegion($hGraphic, $hRegion1, $hBrush)
_GDIPlus_GraphicsFillRegion($hGraphic, $hRegion2, $hBrush)

Do
   $msg = GUIGetMsg()
Until $msg = $GUI_EVENT_CLOSE Or $msg = $btn_exit

;zwolnienie zasobów
_GDIPlus_BitmapDispose($hBrush)
_GDIPlus_RegionDispose($hRegion1)
_GDIPlus_RegionDispose($hRegion2)
_GDIPlus_GraphicsDispose($hGraphic)
_GDIPlus_Shutdown()


_GDIPlus_GraphicsClear

[edytuj]
#include <GDIPlus.au3>
_GDIPlus_GraphicsClear($hGraphics [, $iARGB = 0xFF000000])

Funkcja czyści obszar rysowania zamalowując go podanym kolorem. Zwraca TRUE gdy sukces, lub FALSE gdy wystąpił błąd.

$hGraphics - uchwyt do obiektu zwracany przez _GDIPlus_GraphicsCreateFromHWND lub _GDIPlus_GraphicsCreateFromHWDC

$iARGB - składowe koloru, po dwa bajty aarrggbb (np. 0xEEFF1055), gdzie:

aa - jasność koloru od 00 (najciemniejszy) do FF (najjaśniejszy)

rr, gg, bb - składowe poszczególnych kolorów RGB, wartości od 00 do FF

Przykład:

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

;tworzenie GUI
$hGUI = GUICreate("GDI+", 400, 300)
GUISetState()

_GDIPlus_Startup()
$hGraphic = _GDIPlus_GraphicsCreateFromHWND($hGUI)

;rysowanie elipsy domyślnym pędzlem
_GDIPlus_GraphicsfillEllipse($hGraphic, 160, 100, 150, 100)

$hBrush = _GDIPlus_BrushCreateSolid(0xB0FF0000) ;tworzenie pędzla
_GDIPlus_GraphicsFillEllipse($hGraphic, 210, 30, 120, 250, $hBrush)

MsgBox(0,"","Czyszczenie rysunku")

_GDIPlus_GraphicsClear($hGraphic, 0xF0FFFFFF)

Do
Until GUIGetMsg() = $GUI_EVENT_CLOSE

;zwolnienie zasobów
_GDIPlus_BrushDispose($hBrush)
_GDIPlus_GraphicsDispose($hGraphic)
_GDIPlus_Shutdown()

Renderowanie

[edytuj]

_GDIPlus_GraphicsGetSmoothingMode

[edytuj]
#include <GDIPlus.au3>
_GDIPlus_GraphicsGetSmoothingMode($hGraphics)

Funkcja zwraca liczę określającą jakość renderowania obiektów graficznych, lub -1 gdy wystąpił błąd.

0 - wygładzanie nie jest stosowane
1 - wygładzanie jest stosowane przy użyciu filtra 8 x 4
2 - wygładzanie jest stosowane przy użyciu filtra 8 x 8

$hGraphics - uchwyt do obiektu zwracany przez _GDIPlus_GraphicsCreateFromHWND lub _GDIPlus_GraphicsCreateFromHWDC


_GDIPlus_GraphicsSetSmoothingMode

[edytuj]
#include <GDIPlus.au3>
_GDIPlus_GraphicsSetSmoothingMode($hGraphics, $iSmooth)

Funkcja ustawia jakość renderowania obiektów graficznych. Zwraca TRUE gdy sukces, lub FALSE gdy wystąpił błąd.

$hGraphics - uchwyt do obiektu zwracany przez _GDIPlus_GraphicsCreateFromHWND lub _GDIPlus_GraphicsCreateFromHWDC

$iSmooth - jakość renderowania jak dla _GDIPlus_GraphicsGetSmoothingMode

Przykład:

 
#include <GDIPlus.au3>

$hWnd = GUICreate("GDI+ SmoothingMode", 600, 400)
GUISetState()

_GDIPlus_Startup()
$hGraphics = _GDIPlus_GraphicsCreateFromHWND($hWnd)

MsgBox(0,"SmoothingMode:", "SmoothingMode = " _
          & _GDIPlus_GraphicsGetSmoothingMode($hGraphics))

;bez wygładzania (SmoothingMode 0)
_GDIPlus_GraphicsSetSmoothingMode($hGraphics, 0)
_GDIPlus_GraphicsFillEllipse($hGraphics, 20, 100, 160, 200)
_GDIPlus_GraphicsDrawLine($hGraphics, 20, 80, 170, 70)

;z wygładzaniem (SmoothingMode 1)
_GDIPlus_GraphicsSetSmoothingMode($hGraphics, 1)
_GDIPlus_GraphicsFillEllipse($hGraphics, 220, 100, 160, 200)
_GDIPlus_GraphicsDrawLine($hGraphics, 220, 80, 370, 70)

;z wygładzaniem (SmoothingMode 2)
_GDIPlus_GraphicsSetSmoothingMode($hGraphics, 2)
_GDIPlus_GraphicsFillEllipse($hGraphics, 420, 100, 160, 200)
_GDIPlus_GraphicsDrawLine($hGraphics, 420, 80, 570, 70)

;zwolnienie zasobów
_GDIPlus_GraphicsDispose($hGraphics)
_GDIPlus_Shutdown()

Do
Until GUIGetMsg() = -3


Manipulowanie układem współrzędnych

[edytuj]

_GDIPlus_GraphicsSetTransform

[edytuj]
#include <GDIPlus.au3>
_GDIPlus_GraphicsSetTransform($hGraphics, $hMatrix)

Funkcja zmienia układ współrzędnych w obiekcie graphics, na ten zdefiniowany w obiekcie matrix. Zwraca TRUE gdy sukces, lub FALSE gdy wystąpił błąd.

$hGraphics - uchwyt do obiektu graphics

$hMatrix - uchwyt do obiektu matrix

Przykład manipulowania układem współrzędnych:

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

Dim $H = 500, $W = 500, $alfa = 30

;tworzenie GUI
$hGUI = GUICreate("GDI+", $H, $W)
GUISetState()

;inicjalizacja GDI+
_GDIPlus_Startup()

;tworzenie obiektu graphics w oknie GUI
$hGraphic = _GDIPlus_GraphicsCreateFromHWND($hGUI)

;wypisanie tekstu
_GDIPlus_GraphicsDrawString($hGraphic, "Tekst prosty", 10, 10)

;tworzenie obiektu matrix (nowy układ współrzędnych)
$hMatrix = _GDIPlus_MatrixCreate()

;przesunięcie układu współrzędnych do środka okna (w obiekcie matrix)
_GDIPlus_MatrixTranslate($hMatrix, $H/2, $W/2)

;inicjalizacja nowego układu współrzędnych
_GDIPlus_GraphicsSetTransform($hGraphic, $hMatrix)

For $i = 0 to 360-$alfa Step $alfa

   ;wpisanie tekstu w nowych współrzędnych
   _GDIPlus_GraphicsDrawString($hGraphic, "Tekst obrócony w prawo o " & _
                                        	$i & " stopni", 20, -10)

   ;obrócenie układu współrzędnych (w obiekcie matrix)
   _GDIPlus_MatrixRotate($hMatrix, $alfa)

   ;przeskalowanie układu współrzędnych (w obiekcie matrix)
   _GDIPlus_MatrixScale($hMatrix, 0.96, 0.96)

   ;inicjalizacja nowego układu współrzędnych (w obiekcie graphics)
   _GDIPlus_GraphicsSetTransform($hGraphic, $hMatrix)
   
Next

Do
Until GUIGetMsg() = $GUI_EVENT_CLOSE

;zwolnienie zasobów
_GDIPlus_MatrixDispose($hMatrix)
_GDIPlus_GraphicsDispose($hGraphic)
_GDIPlus_Shutdown()


_GDIPlus_GraphicsTranslateTransform

[edytuj]
#include <GDIPlus.au3>
_GDIPlus_GraphicsTranslateTransform ( $hGraphics, $fDX, $fDY [, $iOrder = 0] )

Funkcja aktualizuje macierz transformacji obiektu Graphics, co jest równoznaczne z przesunięciem układu współrzędnych. Zwraca TRUE gdy sukces, lub FALSE gdy wystąpił błąd.

$hGraphics - uchwyt do obiektu graphics

$fDX, $fDY - składowe X i Y transformacji

$iOrder - parametr określa kolejność mnożenia macierzy. I tak 0 -> MD * MP, 1 -> MP * MD. Ponieważ mnożenie macierzy nie jest przemienne, najczęściej efekt działania funkcji dla obu wartości parametru będzie różny.

Przykład:

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

$hGUI = GUICreate("GDI+", 800, 300)
GUISetState()

_GDIPlus_Startup()
$hGraphic = _GDIPlus_GraphicsCreateFromHWND($hGUI)
_GDIPlus_GraphicsSetSmoothingMode($hGraphic, 2)

$hBrush = _GDIPlus_BrushCreateSolid(0xFF006600)
$hBrush1 = _GDIPlus_BrushCreateSolid(0xFF555555)
$hPen = _GDIPlus_PenCreate(0xFF00FF00, 2)

$hPath = _GDIPlus_PathCreate()
$hFamily = _GDIPlus_FontFamilyCreate("Arial Black")
$tLayout = _GDIPlus_RectFCreate(100,10)
_GDIPlus_PathAddString($hPath, "AutoIt", $tLayout, $hFamily, 0, 160)

_GDIPlus_GraphicsFillPath($hGraphic, $hPath, $hBrush1)

_GDIPlus_GraphicsTranslateTransform($hGraphic, -10, -10) ;przesunięcie układu
_GDIPlus_GraphicsFillPath($hGraphic, $hPath, $hBrush)
_GDIPlus_GraphicsDrawPath($hGraphic, $hPath, $hPen)

Do
Until GUIGetMsg() = $GUI_EVENT_CLOSE

_GDIPlus_FontFamilyDispose($hFamily)
_GDIPlus_PathDispose($hPath)
_GDIPlus_BrushDispose($hBrush)
_GDIPlus_BrushDispose($hBrush1)
_GDIPlus_PenDispose($hPen)
_GDIPlus_GraphicsDispose($hGraphic)
_GDIPlus_Shutdown()


_GDIPlus_GraphicsResetTransform

[edytuj]
#include <GDIPlus.au3>
_GDIPlus_GraphicsResetTransform ( $hGraphics )

Funkcja resetuje transformacje w obiekcie graphic. Zwraca TRUE gdy sukces, lub FALSE gdy wystąpił błąd.

$hGraphics - uchwyt do obiektu graphics

Przykład:

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

$hGUI = GUICreate("Walka z cieniem", 600, 250)
GUISetState()

_GDIPlus_Startup()
$hGraphic = _GDIPlus_GraphicsCreateFromHWND($hGUI)
_GDIPlus_GraphicsSetSmoothingMode($hGraphic, 2) ;włączenie wygładzania krawędzi

;tworzenie pędzli i pióra
Dim $aBrush[5]
$aBrush[0] = _GDIPlus_BrushCreateSolid(0xFF006600)
$aBrush[1] = _GDIPlus_BrushCreateSolid(0x50909000)
$aBrush[2] = _GDIPlus_BrushCreateSolid(0x50FF0000)
$aBrush[3] = _GDIPlus_BrushCreateSolid(0x5000FF00)
$aBrush[4] = _GDIPlus_BrushCreateSolid(0x500000FF)
$hPen = _GDIPlus_PenCreate(0xFF000000, 2)

;tworzenie ścieżki
$hPath = _GDIPlus_PathCreate()
$hFamily = _GDIPlus_FontFamilyCreate("Arial Black")
$tLayout = _GDIPlus_RectFCreate(70,5)
_GDIPlus_PathAddString($hPath, "Cień", $tLayout, $hFamily, 0, 160)

;dane przesunięcia cieni
Dim $aXY[][] = [[20,20],[-20,20],[20,-20],[-20,-20]]

;rysowanie cieni
For $i = 0 To 3
 _GDIPlus_GraphicsTranslateTransform($hGraphic, $aXY[$i][0], $aXY[$i][1])
 _GDIPlus_GraphicsFillPath($hGraphic, $hPath, $aBrush[$i+1])
 _GDIPlus_GraphicsResetTransform($hGraphic) ;reset transformacji
Next

;napis główny
_GDIPlus_GraphicsFillPath($hGraphic, $hPath, $aBrush[0])
_GDIPlus_GraphicsDrawPath($hGraphic, $hPath, $hPen)

Do
Until GUIGetMsg() = $GUI_EVENT_CLOSE

;zwolnienie zasobów
For $i = 0 To 4
   _GDIPlus_BrushDispose($aBrush[$i])
Next
_GDIPlus_FontFamilyDispose($hFamily)
_GDIPlus_PathDispose($hPath)
_GDIPlus_PenDispose($hPen)
_GDIPlus_GraphicsDispose($hGraphic)
_GDIPlus_Shutdown()

Operowanie bitmapami i obrazami

[edytuj]

Bitmapa (ang. bitmap) to zbiór danych, w których zapisana jest grafika rastrowa. Każdemu pikslowi obrazu odpowiada pewna ilość bitów informacji określających jego kolor.

Należy odróżnić bitmapę od obiektu bitmap.

Obiekt bitmap to coś więcej oprócz danych o obrazie zawiera także pewien zbór funkcji, które mogą wykonywać operacje na tych danych. Funkcje te nazywamy metodami.

AutoiIt nie jest językiem obiektowym, więc do metod można mieć dostęp tylko poprzez funkcje zdefiniowane w bibliotece (chyba że chcielibyśmy bezpośrednio grzebać się w bibliotekach DLL i obiektach, ale to zadanie dla ambitnych i zaawansowanych).

Pod określeniem obraz (ang. image) będziemy rozumieli tylko dane o grafice, zakodowane w jednym z formatów grafiki rastrowej (BMP, JPG, GIF, PNG, TIF ...).

Ponieważ obiekt bitmap dziedzicz po obiekcie image (ma wszystkie jego cechy i metody), w zakresie używanym w UDF'e można je używać zamiennie.

Tworzenie i przetwarzanie bitmap

[edytuj]

_GDIPlus_BitmapCreateFromFile

[edytuj]
#include <GDIPlus.au3>
_GDIPlus_BitmapCreateFromFile($sFileName)

Funkcja tworzy obiekt bitmap z wczytanego pliku obrazu. Zwraca uchwyt do utworzonego obiektu, lub 0 gdy wystąpił błąd.

$sFileName - nazwa pliku obrazu, z którego zostanie utworzony obiekt. Dostępne formaty BMP, JPG, GIF, PNG i TIF.

Likwidacja obiektu za pomocą _GDIPlus_BitmapDispose.


_GDIPlus_BitmapCreateFromGraphics

[edytuj]
#include <GDIPlus.au3>
_GDIPlus_BitmapCreateFromGraphics($iWidth, $iHeight, $hGraphics)

Funkcja tworzy obiekt bitmap na podstawie obiektu graficznego (np. utworzonego przez _GDIPlus_GraphicsCreateFromHWND). Zwraca uchwyt do utworzonego obiektu, lub 0 gdy wystąpił błąd.

$iWidth - rozdzielczość bitmapy w poziomie

$iHeight - rozdzielczość bitmapy w pionie

$hGraphics - uchwyt do obiektu graficznego

UWAGA: Funkcja nie kopiuje obrazu z obiektu graficznego, utworzona bitmapa jest jednokolorowa (w kolorze czarnym).

Likwidacja obiektu za pomocą _GDIPlus_BitmapDispose.


_GDIPlus_BitmapCreateFromHICON

[edytuj]
#include <GDIPlus.au3>
_GDIPlus_BitmapCreateFromHICON ( $hIcon )

Funkcja tworzy obiekt bitmap na bazie ikony o podanym uchwycie. Zwraca uchwyt do utworzonego obiektu, lub 0 gdy wystąpił błąd.

$hIcon uchwyt do ikony

Przykład:

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

$hGUI = GUICreate("GDI+", 168, 168)
GUISetState()

_GDIPlus_Startup()
$hGraphic = _GDIPlus_GraphicsCreateFromHWND($hGUI)

$hIcon = _WinAPI_ShellExtractIcon(@SystemDir & '\shell32.dll', 32, 96, 96)

$hBitmap = _GDIPlus_BitmapCreateFromHICON($hIcon)

_GDIPlus_GraphicsDrawImage($hGraphic, $hBitmap, 30, 30)

Do
Until GUIGetMsg() = $GUI_EVENT_CLOSE

_WinAPI_DestroyIcon($hIcon)
_GDIPlus_BitmapDispose($hBitmap)
_GDIPlus_GraphicsDispose($hGraphic)
_GDIPlus_Shutdown()


_GDIPlus_BitmapCreateFromHICON32

[edytuj]
#include <GDIPlus.au3>
_GDIPlus_BitmapCreateFromHICON32 ( $hIcon )

Funkcja tworzy obiekt bitmap na bazie 32 bitowej ikony o podanym uchwycie. Zwraca uchwyt do utworzonego obiektu, lub 0 gdy wystąpił błąd.

$hIcon uchwyt do ikony

Przykład:

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

$hGUI = GUICreate("GDI+", 168, 168)
GUISetState()

_GDIPlus_Startup()
$hGraphic = _GDIPlus_GraphicsCreateFromHWND($hGUI)

$hIcon = _WinAPI_ShellExtractIcon(@SystemDir & '\shell32.dll', 32, 96, 96)

$hBitmap = _GDIPlus_BitmapCreateFromHICON32($hIcon)

_GDIPlus_GraphicsDrawImage($hGraphic, $hBitmap, 30, 30)

Do
Until GUIGetMsg() = $GUI_EVENT_CLOSE

_WinAPI_DestroyIcon($hIcon)
_GDIPlus_BitmapDispose($hBitmap)
_GDIPlus_GraphicsDispose($hGraphic)
_GDIPlus_Shutdown()


_GDIPlus_BitmapCreateFromHBITMAP

[edytuj]
#include <GDIPlus.au3>
_GDIPlus_BitmapCreateFromHBITMAP($hBmp [, $hPal = 0])

Funkcja tworzy obiekt bitmap z bitmapy o danym uchwycie HBITMAP. Zwraca uchwyt do utworzonego obiektu, lub 0 gdy wystąpił błąd.

$hBmp - uchwyt HBITMAP do bitmapy

$hPal - uchwyt do palety kolorów, wartość domyślna 0 oznacza paletę domyślną

Likwidacja obiektu za pomocą _GDIPlus_BitmapDispose.


_GDIPlus_BitmapCreateHBITMAPFromBitmap

[edytuj]
#include <GDIPlus.au3>
_GDIPlus_BitmapCreateHBITMAPFromBitmap($hBitmap [, $iARGB = 0xFF000000])

Funkcja tworzy bitmapę z obiektu bitmap. Zwraca uchwyt HBITMAP do bitmapy, lub 0 gdy wystąpił błąd.

$hBitmap - uchwyt do obiektu bitmap

$iARGB - składowe koloru tła, po dwa bajty aarrggbb (np. 0xEEFF1055), gdzie:

aa - przezroczystość (kanał alfa) od 00 (całkowicie przezroczysty) do FF (całkowicie nieprzezroczysty)

rr, gg, bb - składowe poszczególnych kolorów RGB, wartości od 00 do FF

Wartość domyślna (0xFF000000) to całkowicie nieprzezroczysty kolor czarny.

Likwidacja obiektu za pomocą _GDIPlus_BitmapDispose.


_GDIPlus_BitmapCloneArea

[edytuj]
#include <GDIPlus.au3>
_GDIPlus_BitmapCloneArea($hBmp, $iLeft, $iTop, $iWidth, $iHeight [, $iFormat = 0x00021808])

Funkcja tworzy klon obiektu bitmap z podanego zakresu współrzędnych i w określonym formacie. Zwraca uchwyt do nowego obiektu, lub 0 gdy wystąpił błąd.

$hBitmap - uchwyt do obiektu bitmap

$nX i $nY - współrzędne lewego górnego narożnika

$nWidth i $nHeight - długość i szerokość obszaru

$iFormat - kod formatu, domyślna wartość 0x00021808 ($GDIP_PXF24RGB)

$GDIP_PXF01INDEXED = 1 bit na piksel, indeksowane
$GDIP_PXF04INDEXED = 4 bity na piksel, indeksowane
$GDIP_PXF08INDEXED = 8 bitów na piksel, indeksowane
$GDIP_PXF16GRAYSCALE = 16 bity na piksel, w skali szarości
$GDIP_PXF16RGB555 = 16 bity na piksel; 5 bitów dla każdej składowej RGB
$GDIP_PXF16RGB565 = 16 bity na piksel; 5 bitów dla czerwonego, 6 dla zielonego i 5 dla niebieskiego
$GDIP_PXF16ARGB1555 = 16 bity na piksel; 1 bit na alfa i 5 bitów dla każdej składowej RGB
$GDIP_PXF24RGB = 24 bity na piksel; 8 bitów dla każdej składowej RGB
$GDIP_PXF32RGB = 32 bity na piksel; 8 bitów dla każdej składowej RGB, bez alfa
$GDIP_PXF32ARGB = 32 bity na piksel; 8 bitów dla każdej składowej RGB i alfa
$GDIP_PXF32PARGB = 32 bity na piksel; 8 bitów dla każdej składowej RGB i alfa, pre-mulitiplied
$GDIP_PXF48RGB = 48 bity na piksel; 16 bitów dla każdej składowej RGB
$GDIP_PXF64ARGB = 64 bity na piksel; 16 bitów dla każdej składowej RGB i alfa
$GDIP_PXF64PARGB = 64 bity na piksel; 16 bitów dla każdej składowej RGB i alfa

Likwidacja obiektu za pomocą _GDIPlus_BitmapDispose.


_GDIPlus_BitmapDispose

[edytuj]
#include <GDIPlus.au3>
_GDIPlus_BitmapDispose($hBitmap)

Funkcja likwiduje obiekt bitmap. Zwraca TRUE gdy sukces, lub FALSE gdy wystąpił błąd.

$hBitmap - uchwyt do obiektu bitmap


_GDIPlus_BitmapGetPixel

[edytuj]
#include <GDIPlus.au3>
_GDIPlus_BitmapGetPixel ( $hBitmap, $iX, $iY )

Funkcja odczytuje kolor punktu bitmapy. Zwraca kod koloru w formacie AARRGGBB. Gdy wystąpi błąd zwraca 0, a makro @error przyjmuje wartość różną od 0.

$hBitmap - uchwyt do obiektu bitmap

$iX, $iY - współrzędne punktu

_GDIPlus_BitmapSetPixel

[edytuj]
#include <GDIPlus.au3>
_GDIPlus_BitmapSetPixel ( $hBitmap, $iX, $iY, $iARGB )

Funkcja ustawia kolor punktu bitmapy. Zwraca True gdy sukces, lub False gdy wystąpił błąd.

$hBitmap - uchwyt do obiektu bitmap

$iX, $iY - współrzędne punktu

$iARGB - nowy kolor punktu w formacie AARRGGBB

Przykład:

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

_GDIPlus_Startup()
Const $iWidth = 300, $iHeight = 300
$hHBmp = _ScreenCapture_Capture("", 0, 0, $iWidth, $iHeight) ;zrzut fragmentu ekranu
$hBitmap = _GDIPlus_BitmapCreateFromHBITMAP($hHBmp)

;przetwarzanie kolorów fragmentu pitmapy
For $iY = 30 To $iHeight - 31
   For $iX = 30 To $iWidth - 31
      $iColor = _GDIPlus_BitmapGetPixel($hBitmap, $iX, $iY) ;odczyt koloru poksela
      _GDIPlus_BitmapSetPixel($hBitmap, $iX, $iY, BitXOR(0xFFFFFFFF, $iColor)) ;zmiana koloru piksela
   Next
Next
$hGUI = GUICreate("GDI+", $iWidth, $iHeight)
GUISetState()

$hGraphics = _GDIPlus_GraphicsCreateFromHWND($hGUI)
_GDIPlus_GraphicsDrawImage($hGraphics, $hBitmap, 0, 0)

Do
Until GUIGetMsg() = $GUI_EVENT_CLOSE

;zwolnienie zasobów
_WinAPI_DeleteObject($hHBmp)
_GDIPlus_GraphicsDispose($hGraphics)
_GDIPlus_Shutdown()
GUIDelete($hGUI)


_GDIPlus_HICONCreateFromBitmap

[edytuj]
#include <GDIPlus.au3>
_GDIPlus_HICONCreateFromBitmap ( $hBitmap )

Funkcja tworzy ikonę z bitmapy. Zwraca uchwyt do ikony, lub 0 gdy wystąpił błąd.

$hBitmap - uchwyt do obiektu bitmap

Przykład:

 
#include <GDIPlus.au3>

Opt('TrayMenuMode', 3)
_GDIPlus_Startup()

$sFile = FileOpenDialog("Wybierz obrazek", "", "Obrazy (*.bmp;*.png;*.jpg;*.gif;*.tif)")

$hBitmap = _GDIPlus_ImageLoadFromFile($sFile) ;wczytanie bitmapy z dysku

$hIcon = _GDIPlus_HICONCreateFromBitmap($hBitmap) ;tworzenie ikony z bitmapy

_WinAPI_SaveHICONToFile('MyIcon.ico', $hIcon) ;zapisanie ikony na dysku

;zwolnienie zasobów
_GDIPlus_BitmapDispose($hBitmap)
_GDIPlus_Shutdown()

;tworzenie menu w tray'u
$hMenu = TrayItemGetHandle(0)
$idView = TrayCreateItem('Wyświetlenie obrazu ikony')
TrayCreateItem('')
$idExit = TrayCreateItem('Koniec')
TraySetIcon('MyIcon.ico') ;zmiana ikony w tray'u
TraySetState()
TrayTip("Uwaga", 'Zmiana ikony w tray', 30)

Do
    $idMsg = TrayGetMsg()
	If $idMsg = $idExit Then Exit
	if $idMsg = $idView Then
		SplashImageOn('', $sFile)
		Sleep(3000)
		SplashOff()
	EndIf
Until 0

Tworzenie, zapisywanie i manipulowanie obrazami

[edytuj]

_GDIPlus_ImageLoadFromFile

[edytuj]
#include <GDIPlus.au3>
_GDIPlus_ImageLoadFromFile($sFileName)

Funkcja tworzy obiekt image z wczytanego pliku obrazu. Zwraca uchwyt do utworzonego obiektu, lub 0 gdy wystąpił błąd.

$sFileName - nazwa pliku obrazu, z którego zostanie utworzony obiekt. Dostępne formaty BMP, JPG, GIF, PNG i TIF.

Likwidacja obiektu za pomocą _GDIPlus_ImageDispose.


_GDIPlus_ImageDispose

[edytuj]
#include <GDIPlus.au3>
_GDIPlus_ImageDispose($hImage)

Funkcja likwiduje obiekt image. Zwraca TRUE gdy sukces, lub FALSE gdy wystąpił błąd.

$hImage - uchwyt do obiektu image


_GDIPlus_ImageSaveToFile

[edytuj]
#include <GDIPlus.au3>
_GDIPlus_ImageSaveToFile($hImage, $sFileName)

Funkcja zapisuje obraz na dysku. Zwraca TRUE gdy sukces, lub FALSE gdy wystąpił błąd.

$hImage - uchwyt do obiektu image

$sFileName - nazwa pliku obrazu z pełną ścieżką i rozszerzeniem


_GDIPlus_ImageSaveToFileEx

[edytuj]
#include <GDIPlus.au3>
_GDIPlus_ImageSaveToFileEx($hImage, $sFileName, $sEncoder [, $pParams = 0])

Funkcja zapisuje obraz na dysku. Zwraca TRUE gdy sukces, lub FALSE gdy wystąpił błąd.

$hImage - uchwyt do obiektu image

$sFileName - nazwa pliku obrazu z pełną ścieżką i rozszerzeniem

$sEncoder - string identyfikatora enkoder (CLSID), np. zwracany przez _GDIPlus_EncodersGetCLSID

$pParams - wskaźnik do struktury $tagGDIPPENCODERPARAMS


_GDIPlus_ImageGetGraphicsContext

[edytuj]
#include <GDIPlus.au3>
_GDIPlus_ImageGetGraphicsContext($hImage)

Funkcja tworzy obiekt graphics powiązany z obiektem image. Zwraca uchwyt do obiektu graphics, lub 0 gdy wystąpił błąd.

$hImage - uchwyt do obiektu image

UWAGA: Funkcja powoduje, że operacje graficzne na obiekcie graphics, będą wykonane nie na ekranie lecz na znajdującym się w pamięci obrazie.

Przykład:

 
#include <GDIPlus.au3>

Dim $iWidth = 400, $iHeight = 400

$hWnd = GUICreate("GDI+ operowanie obrazami", 400, 400)
GUISetState()

_GDIPlus_Startup()
;tworzenie obiektu graphics w GUI
$hGraphics = _GDIPlus_GraphicsCreateFromHWND($hWnd)

;tworzenie obiektu bitmap na podstawie obiektu graphics
$hBitmap = _GDIPlus_BitmapCreateFromGraphics($iWidth, $iHeight, $hGraphics)

;tworzenie nowego obiektu graphics powiązanego z obiektem bitmap
$hBitmapContext = _GDIPlus_ImageGetGraphicsContext($hBitmap)

;tworzenie pędzli żółtego i niebieskiego
$hBrush_Yellow = _GDIPlus_BrushCreateSolid(0xFFFFFF00)
$hBrush_Blue = _GDIPlus_BrushCreateSolid(0xFF0000FF)

;zamalowanie bitmapy kolorem białym
_GDIPlus_GraphicsClear($hBitmapContext, 0xFFFFFFFF)

;rysowanie prostokąta i elipsy
_GDIPlus_GraphicsFillRect($hBitmapContext, 50, 50, 200, 200, $hBrush_Blue)
_GDIPlus_GraphicsFillEllipse($hBitmapContext, 150, 150, 200, 300, $hBrush_Yellow)

MsgBox(0,"","Rysunek tworzony był w pamięci," & @LF & _
			"ale teraz pojawi się na ekranie" & @LF & _
			"i zostanie zapisany na dysku.")

;wrysowanie bitmapy w obiekcie graphics w oknie GUI
_GDIPlus_GraphicsDrawImageRect($hGraphics, $hBitmap, 0, 0, $iWidth, $iHeight)

;zapis bitmapy do pliku na dysku
_GDIPlus_ImageSaveToFile($hBitmap, "GDIPlus_Image.jpg")

;zwolnienie zasobów
_GDIPlus_GraphicsDispose($hGraphics)
_GDIPlus_GraphicsDispose($hBitmapContext)
_GDIPlus_BitmapDispose($hBitmap)
_GDIPlus_BrushDispose($hBrush_Yellow)
_GDIPlus_BrushDispose($hBrush_Blue)
_GDIPlus_Shutdown()

Do
Until GUIGetMsg() = -3


_GDIPlus_ImageGetFlags

[edytuj]
#include <GDIPlus.au3>
_GDIPlus_ImageGetFlags ( $hImage )

Funkcja zwraca dwuelementową tablicę z flagą i opisem atrybutów pikseli obrazu. Jeżeli wystąpił błąd makro @error zawiera kod błędu.

Zwracana tablica:
[0] - liczba całkowita określająca flagę atrybutów pikseli
[1] - string z opisem atrybutów pikseli

Makro @error:
10 - flaga nie może być odczytana
11 - nieprawidłowy uchwyt obrazu
12 - brak danych pikseli

$hImage - uchwyt do obiektu image


_GDIPlus_ImageGetHeight

[edytuj]
 #include <GDIPlus.au3>
_GDIPlus_ImageGetHeight ( $hImage )

Funkcja zwraca wysokość obrazu w pikselach, lub -1 gdy wystąpi błąd.

$hImage - uchwyt do obiektu image


_GDIPlus_ImageGetWidth

[edytuj]
 #include <GDIPlus.au3>
_GDIPlus_ImageGetWidth ( $hImage )

Funkcja zwraca szerokość obrazu w pikselach, lub -1 gdy wystąpi błąd.

$hImage - uchwyt do obiektu image


_GDIPlus_ImageGetHorizontalResolution

[edytuj]
 #include <GDIPlus.au3>
_GDIPlus_ImageGetHorizontalResolution ( $hImage )

Funkcja zwraca poziomą rozdzielczość obrazu (w DPI), lub -1 gdy wystąpi błąd.

$hImage - uchwyt do obiektu image


_GDIPlus_ImageGetVerticalResolution

[edytuj]
 #include <GDIPlus.au3>
_GDIPlus_ImageGetVerticalResolution ( $hImage )

Funkcja zwraca pionową rozdzielczość obrazu (w DPI), lub -1 gdy wystąpi błąd.

$hImage - uchwyt do obiektu image


_GDIPlus_ImageGetPixelFormat

[edytuj]
#include <GDIPlus.au3>
_GDIPlus_ImageGetPixelFormat ( $hImage )

Funkcja zwraca dwuelementową tablicę z opisem formatu pikseli obrazu. Jeżeli wystąpił błąd makro @error zawiera kod błędu.

Zwracana tablica:
[0] - liczba całkowita określająca format pikseli
[1] - string z opisem formatu pikseli

Makro @error:
11 - nieprawidłowy format pikseli
12 - nieprawidłowy uchwyt obrazu
13 - nieznany format pikseli

$hImage - uchwyt do obiektu image


_GDIPlus_ImageGetRawFormat

[edytuj]
#include <GDIPlus.au3>
_GDIPlus_ImageGetRawFormat ( $hImage )

Funkcja zwraca dwuelementową tablicę z identyfikatorem GUID formatu pliku i nazwą formatu obrazu. Jeżeli wystąpił błąd makro @error zawiera kod błędu.

Zwracana tablica:
[0] - string identyfikatora GUID formatu pliku
[1] - string z nazwą formatu obrazu

Makro @error:
11 - nieprawidłowy uchwyt obrazu
12 - nieprawidłowy GUID formatu pliku
13 - nieznany GUID formatu pliku

$hImage - uchwyt do obiektu image


_GDIPlus_ImageGetType

[edytuj]
#include <GDIPlus.au3>
_GDIPlus_ImageGetType ( $hImage )

Funkcja zwraca kod typu obrazu, lub -1 gdy wystąpił błąd.

$GDIP_IMAGETYPE_UNKNOWN  | 0 | typ nieznany
$GDIP_IMAGETYPE_BITMAP   | 1 | bitmapa BMP, PNG, GIF, JPEG, TIFF, ICO, EXIF
$GDIP_IMAGETYPE_METAFILE | 2 | metafile EMF, WMF

$hImage - uchwyt do obiektu image

Przykład:

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

_GDIPlus_Startup()

;tworzenie obrazka testowego
$hBitmap = _ScreenCapture_Capture("", 100, 50, 800, 550)
$hImage = _GDIPlus_BitmapCreateFromHBITMAP($hBitmap)

;odczyt danych obrazu
$iX = _GDIPlus_ImageGetWidth($hImage)
$iY = _GDIPlus_ImageGetHeight($hImage)
$iXRes = _GDIPlus_ImageGetHorizontalResolution($hImage)
$iYRes = _GDIPlus_ImageGetVerticalResolution($hImage)
$iImageType = _GDIPlus_ImageGetType($hImage)
$iPixelFormat = _GDIPlus_ImageGetPixelFormat($hImage)
$iRAWFormat = _GDIPlus_ImageGetRawFormat($hImage)
$iFlags = _GDIPlus_ImageGetFlags($hImage)

MsgBox(0, "DANE OBRAZU", "Szerokość obrazu = " & $iX & @LF & _
			  "Wysokość obrazu = " & $iY & @LF & _
			  "Rozdzielczość pozioma = " & $iXRes & @LF & _
			  "Rozdzielczość pionowa = " & $iYRes & @LF & _
			  "Typ obrazu = " & $iImageType & @LF & _
			  "Format pikseli = " & $iPixelFormat[1] & @LF & _
			  "Format RAW  = " & $iRAWFormat[1] & @LF & _
			  "Flaga = " & $iFlags[1])

;zwolnienie zasobów
_GDIPlus_ImageDispose($hImage)
_WinAPI_DeleteObject($hBitmap)
_GDIPlus_Shutdown()


_GDIPlus_ImageResize

[edytuj]
#include <GDIPlus.au3>
_GDIPlus_ImageResize ( $hImage, $iNewWidth, $iNewHeight [, $iInterpolationMode = $GDIP_INTERPOLATIONMODE_HIGHQUALITYBICUBIC] )

Funkcja powoduje zmianę wielkości obrazu do rozmiarów podanych jako parametr. Zwraca uchwyt do nowego obrazu, lub 0 gdy wystąpił błąd (w tym przypadku makro @error zwraca kod błędu).

@error:
1 - nie można utworzyć nowej bitmapy
2 - nie można utworzyć kontekstu grafiki
3 - nie można ustawić trybu interpolacji od kontekstu graficznego
4 - nie można skopiować obraz do skalowanj bitmapy

$hImage - uchwyt do obiektu image

$iNewWidth, $iNewHeight - nowa szerokość i wysokość obrazu

$iInterpolationMode - tryb interpolacji, domyślnie $GDIP_INTERPOLATIONMODE_HIGHQUALITYBICUBIC

Przykład:

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

_GDIPlus_Startup()

;tworzenie obrazka testowego
$hHBitmap = _ScreenCapture_Capture("")
$hBitmap = _GDIPlus_BitmapCreateFromHBITMAP($hHBitmap)

$hGUI = GUICreate("GDI+ test", 1000, 600) ;tworzenie okna GUI
$hGraphics = _GDIPlus_GraphicsCreateFromHWND($hGUI)
GUISetState()

For $i = 10 To 0.5 Step -0.05
   $hBitmap_Scaled = _GDIPlus_ImageResize($hBitmap, @DesktopWidth/$i, @DesktopHeight/$i) ;zmiana wymiarów obrazu
   _GDIPlus_GraphicsDrawImage($hGraphics, $hBitmap_Scaled, 0, 0) ;wyświetlenie obrazu
   _GDIPlus_BitmapDispose($hBitmap_Scaled)
Next

Do
Until GUIGetMsg() = $GUI_EVENT_CLOSE

;zwolnienie zasobów
_WinAPI_DeleteObject($hHBitmap)
_WinAPI_DeleteObject($hBitmap)
_GDIPlus_Shutdown()


_GDIPlus_ImageRotateFlip

[edytuj]
#include <GDIPlus.au3>
_GDIPlus_ImageRotateFlip ( $hImage, $iRotateFlipType )

Funkcja powoduje obracanie i odwracanie obrazu. Zwraca True gdy sukces, lub False gdy wystąpił błąd ((w tym przypadku makro @error > 0).

$hImage - uchwyt do obiektu image $iRotateFlipType - kod przekształcenia:

0 - brak transformacji obrazu

1 - obrót o 90 stopni w prawo

2 - obrót o 180 stopni

3 - obrót o 270 stopni (90 stopni w lewo)

4 - bez obrotu, odwrócenie (symetria) względem osi pionowej

5 - obrót o 90 stopni, a następnie odwrócenie (symetria) względem osi pionowej

6 - bez obrotu, odwrócenie (symetria) względem osi poziomej

7 - obrót o 270 stopni (90 stopni w lewo), a następnie odwrócenie (symetria) względem osi pionowej

Przykład:

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

_GDIPlus_Startup()

;tworzenie obrazka testowego
$hHBitmap = _ScreenCapture_Capture("", 0, 0, 400,300)


$hGUI = GUICreate("GDI+ test", 600, 600) ;tworzenie okna GUI
$hGraphics = _GDIPlus_GraphicsCreateFromHWND($hGUI)
GUISetState()

$hBitmap = _GDIPlus_BitmapCreateFromHBITMAP($hHBitmap)
_GDIPlus_ImageRotateFlip($hBitmap, 7) ;przekształcenie obrazu
_GDIPlus_GraphicsDrawImage($hGraphics, $hBitmap, 0, 0) ;wyświetlenie obrazu

Do
Until GUIGetMsg() = $GUI_EVENT_CLOSE

;zwolnienie zasobów
_WinAPI_DeleteObject($hHBitmap)
_WinAPI_DeleteObject($hBitmap)
_GDIPlus_Shutdown()


_GDIPlus_ImageScale

[edytuj]
#include <GDIPlus.au3>
_GDIPlus_ImageScale ( $hImage, $iScaleW, $iScaleH [, $iInterpolationMode = $GDIP_INTERPOLATIONMODE_HIGHQUALITYBICUBIC] )

Funkcja powoduje przeskalowanie obrazu mnożnik podanych jako parametr. Zwraca uchwyt do nowego obrazu, lub 0 gdy wystąpił błąd (w tym przypadku makro @error zwraca kod błędu).

@error:
1 - nie można odczytać szerokości obrazu
2 - nie można odczytać wysokości obrazu
3 - nie można utworzyć nowej bitmapy
4 - nie można utworzyć kontekstu grafiki
5 - nie można ustawić trybu interpolacji od kontekstu graficznego
6 - nie można skopiować obraz do skalowanej bitmapy

$hImage - uchwyt do obiektu image

$iScaleW, $iScaleH - mnożnik skali w poziomie i pionie

$iInterpolationMode - tryb interpolacji, domyślnie $GDIP_INTERPOLATIONMODE_HIGHQUALITYBICUBIC

Przykład:

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

_GDIPlus_Startup()

;tworzenie obrazka testowego
$hHBitmap = _ScreenCapture_Capture("")
$hBitmap = _GDIPlus_BitmapCreateFromHBITMAP($hHBitmap)

$hGUI = GUICreate("GDI+ test", 1000, 600) ;tworzenie okna GUI
$hGraphics = _GDIPlus_GraphicsCreateFromHWND($hGUI)
GUISetState()

For $i = 0.1 To 2 Step 0.05
   $hBitmap_Scaled = _GDIPlus_ImageScale($hBitmap, $i, $i) ;zmiana wymiarów obrazu
   _GDIPlus_GraphicsDrawImage($hGraphics, $hBitmap_Scaled, 0, 0) ;wyświetlenie obrazu
   _GDIPlus_BitmapDispose($hBitmap_Scaled)
Next

Do
Until GUIGetMsg() = $GUI_EVENT_CLOSE

;zwolnienie zasobów
_WinAPI_DeleteObject($hHBitmap)
_WinAPI_DeleteObject($hBitmap)
_GDIPlus_Shutdown()


_GDIPlus_GraphicsDrawImage

[edytuj]
#include <GDIPlus.au3>
_GDIPlus_GraphicsDrawImage($hGraphics, $hImage, $iX, $iY)

Funkcja wstawia obrazek w obiekt graphics. Zwraca True gdy sukces, lub False gdy wystąpił błąd.

$hGraphics - uchwyt do obiektu zwracany przez _GDIPlus_GraphicsCreateFromHWND lub _GDIPlus_GraphicsCreateFromHWDC

$hImage - uchwyt do obiektu image

$iX i $iY - współrzędne lewego górnego narożnika obrazka we współrzędnych obiektu graphics

Przykład:

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

; Initialize GDI+ library
_GDIPlus_Startup()

;tworzenie obrazków testowych
_ScreenCapture_Capture("pic1.jpg")
_ScreenCapture_Capture("pic2.jpg", 0, 0, 400, 300)

;wczytanie obrazków testowych
$hImage1 = _GDIPlus_BitmapCreateFromFile("pic1.jpg")
$hImage2 = _GDIPlus_BitmapCreateFromFile("pic2.jpg")

;tworzenie kontekstu
$hGraphic = _GDIPlus_ImageGetGraphicsContext($hImage1)

;wrysowanie jednego obrazu w drugi
_GDIPlus_GraphicsDrawImage($hGraphic, $hImage2, 500, 300)

;zapis na dysk obrazu wynikowego
_GDIPlus_ImageSaveToFile($hImage1, "GDIPlus_GraphicsDrawImage.jpg")

;zwolnienie zasobów
_GDIPlus_ImageDispose($hImage1)
_GDIPlus_ImageDispose($hImage2)
_GDIPlus_Shutdown()

SplashImageOn("GDIPlus_GraphicsDrawImage","GDIPlus_GraphicsDrawImage.jpg", _
                                           @DesktopWidth*0.8, @DesktopHeight*0.8)
Sleep(5000)


_GDIPlus_GraphicsDrawImageRect

[edytuj]
#include <GDIPlus.au3>
_GDIPlus_GraphicsDrawImageRect($hGraphics, $hImage, $iX, $iY, $iW, $iH)

Funkcja wstawia obrazek w obiekt graphics. Zwraca True gdy sukces, lub False gdy wystąpił błąd.

Od _GDIPlus_GraphicsDrawImage różni się tym, że dodatkowo trzeba określić wielkość pola, w które ma być wstawiony obrazek.

$hGraphics - uchwyt do obiektu zwracany przez _GDIPlus_GraphicsCreateFromHWND lub _GDIPlus_GraphicsCreateFromHWDC

$hImage - uchwyt do obiektu image

$iX i $iY - współrzędne lewego górnego narożnika obrazka wstawianego we współrzędnych obiektu graphics

$iW i $iH - szerokość i wysokość pola, w które będzie wstawiony obrazek (jest on skalowany do tego pola)

Przykład:

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

; Initialize GDI+ library
_GDIPlus_Startup()

;tworzenie obrazków testowych
_ScreenCapture_Capture("pic1.jpg")
_ScreenCapture_Capture("pic2.jpg", 0, 0, 400, 300)

;wczytanie obrazków testowych
$hImage1 = _GDIPlus_BitmapCreateFromFile("pic1.jpg")
$hImage2 = _GDIPlus_BitmapCreateFromFile("pic2.jpg")

;tworzenie kontekstu
$hGraphic = _GDIPlus_ImageGetGraphicsContext($hImage1)

;wrysowanie jednego obrazu w drugi
_GDIPlus_GraphicsDrawImageRect($hGraphic, $hImage2, 500, 300, 300, 700)

;zapis na dysk obrazu wynikowego
_GDIPlus_ImageSaveToFile($hImage1, "GDIPlus_GraphicsDrawImage.jpg")

;zwolnienie zasobów
_GDIPlus_ImageDispose($hImage1)
_GDIPlus_ImageDispose($hImage2)
_GDIPlus_Shutdown()

SplashImageOn("GDIPlus_GraphicsDrawImageRect","GDIPlus_GraphicsDrawImage.jpg", _
                                           @DesktopWidth*0.8, @DesktopHeight*0.8)
Sleep(5000)


_GDIPlus_GraphicsDrawImageRectRect

[edytuj]
#include <GDIPlus.au3>
_GDIPlus_GraphicsDrawImageRectRect($hGraphics, $hImage, $iSrcX, $iSrcY, $iSrcWidth, $iSrcHeight, $iDstX, $iDstY, $iDstWidth, $iDstHeight [, $iUnit=2])

Funkcja wstawia obrazek w obiekt graphics. Zwraca True gdy sukces, lub False gdy wystąpił błąd.

Od _GDIPlus_GraphicsDrawImageRect różni się tym, że dodatkowo trzeba określić położenie i wielkość fragmentu obrazka źródłowego, który będzie wstawiony w obrazek docelowy.

$hGraphics - uchwyt do obiektu zwracany przez _GDIPlus_GraphicsCreateFromHWND lub _GDIPlus_GraphicsCreateFromHWDC

$hImage - uchwyt do obiektu image

$iSrcX i $iSrcY - współrzędne lewego górnego narożnika obszaru obrazka źródłowego, który będzie wklejony do obrazka docelowego

$iSrcWidth i $iSrcHeight - długość i wysokość obszaru obrazka źródłowego, który będzie wklejony do obrazka docelowego

$iDestX i $iDestY - współrzędne lewego górnego narożnika obrazka wstawianego we współrzędnych obiektu graphics

$iDstWidth i $iDstHeight - szerokość i wysokość pola, w które będzie wstawiony obrazek (jest on skalowany do tego pola)

$iUnit - określa jednostkę miary dla obrazu, domyślna wartość 2 oznacza, że jednostką jest piksel


Przykład:

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

; Initialize GDI+ library
_GDIPlus_Startup()

;tworzenie obrazków testowych
_ScreenCapture_Capture("pic1.jpg")
_ScreenCapture_Capture("pic2.jpg", 0, 0, 400, 300)

;wczytanie obrazków testowych
$hImage1 = _GDIPlus_BitmapCreateFromFile("pic1.jpg")
$hImage2 = _GDIPlus_BitmapCreateFromFile("pic2.jpg")

;tworzenie kontekstu
$hGraphic = _GDIPlus_ImageGetGraphicsContext($hImage1)

;wrysowanie jednego obrazu w drugi
_GDIPlus_GraphicsDrawImageRectRect($hGraphic, $hImage2, 100, 0, 300, 100, 500, 200, 600, 300)

;zapis na dysk obrazu wynikowego
_GDIPlus_ImageSaveToFile($hImage1, "GDIPlus_GraphicsDrawImage.jpg")

;zwolnienie zasobów
_GDIPlus_ImageDispose($hImage1)
_GDIPlus_ImageDispose($hImage2)
_GDIPlus_Shutdown()

SplashImageOn("GDIPlus_GraphicsDrawImageRectRect","GDIPlus_GraphicsDrawImage.jpg", _
                                           @DesktopWidth*0.6, @DesktopHeight*0.6)

Sleep(3000)


_GDIPlus_DrawImagePoints

[edytuj]
#include <GDIPlus.au3>
_GDIPlus_DrawImagePoints($hGraphics, $hImage, $nULX, $nULY, $nURX, $nURY, $nLLX, $nLLY)

Funkcja rysuje obraz w określonym miejscu. Zwraca TRUE gdy sukces, lub FALSE gdy wystąpił błąd.

$hGraphics - uchwyt do obiektu graphics

$hImage - uchwyt do obiektu image

$nULX, $nULY - współrzędne lewego górnego narożnika obrazu

$nURX, $nURY - współrzędne prawego górnego narożnika obrazu

$nLLX, $nLLY - współrzędne lewego dolnego narożnika obrazu

Przykład:

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

;tworzenie obrazka testowego
_ScreenCapture_Capture("test.jpg", 0, 0, 200, 200)

;tworzenie GUI
$hWnd = GUICreate("",500,500)
GUISetState()

;inicjalizacja GDI+
_GDIPlus_Startup()

;wczytanie obrazka
$hImage = _GDIPlus_ImageLoadFromFile("test.jpg")

;tworzenie obszaru rysowania
$hGraphic = _GDIPlus_GraphicsCreateFromHWND($hWnd)

;wstawienie obrazka
_GDIPlus_DrawImagePoints($hGraphic, $hImage, 50, 10, 350, 70, 100, 300)

 Do
 Until GUIGetMsg() = $GUI_EVENT_CLOSE

;zwolnienie zasobów
_GDIPlus_ImageDispose($hImage)
_GDIPlus_Shutdown()

Manipulowanie atrybutami obrazu

[edytuj]

Obiekt ImageAttributes, zawiera dane o atrybutach obrazu i kilka metod do manipulowania nimi.


_GDIPlus_ImageAttributesCreate

[edytuj]
#include <GDIPlus.au3>
_GDIPlus_ImageAttributesCreate ( )

Funkcja tworzy obiekt ImageAttributes. Zwraca uchwyt do niego, lub 0 gdy wystąpił błąd. W tym wypadku makro @error przyjmuje wartość różną od 0.


_GDIPlus_ImageAttributesDispose

[edytuj]
#include <GDIPlus.au3>
_GDIPlus_ImageAttributesDispose ( $hImageAttributes )

Funkcja likwiduje obiekt ImageAttributes. Zwraca True gdy sukces, lub False gdy wystąpił błąd. W tym wypadku makro @error przyjmuje wartość różną od 0.


_GDIPlus_ImageAttributesSetColorKeys

[edytuj]
#include <GDIPlus.au3>
_GDIPlus_ImageAttributesSetColorKeys ( $hImageAttributes [, $iColorAdjustType = 0 [, $bEnable = False [, $iARGBLow = 0 [, $iARGBHigh = 0]]]] )

Funkcja ustawia lub usuwa klucz kolorów (zakres przezroczystość) dla określonej kategorii. Zwraca True gdy sukces, lub False gdy wystąpił błąd. W tym wypadku makro @error przyjmuje wartość różną od 0.

$hImageAttributes - uchwyt do obiektu ImageAttributes

$iColorAdjustType - kategorie, dla których klucz kolorów jest ustawiony lub wyczyszczony:

0 - korekta kolorów odnosi się do wszystkich kategorii, które nie mają regulacji ustawień własnych
1 - stosuje się do regulacji kolorów obrazów bitmapowych
2 - regulacja kolorów dotyczy operacji pędzla w metaplikach
3 - regulacja kolor dotyczy operacji na piórach w metaplikach
4 - regulacja kolorów dotyczy tekstów sporządzony w metaplikach

$bEnable - True oznacza, że stosowany jest zakres pełnej przejrzystości, zdefiniowany dwoma następnymi parametrami

$iARGBLow, $iARGBHigh - najmniejsza i największa wartość ARGB kolorów, które są całkowicie przezroczyste (gdy $bEnable = True)

_GDIPlus_ImageAttributesSetColorMatrix

[edytuj]
#include <GDIPlus.au3>
_GDIPlus_ImageAttributesSetColorMatrix ( $hImageAttributes [, $iColorAdjustType = 0 [, $bEnable = False [, $tClrMatrix = 0 [, $tClrMatrix = 0 [, $iColorMatrixFlags = 0]]]]] )

Funkcja ustawia lub usuwa klucz kolorów za pomocą macierzy ColorMatrix, dla określonej kategorii. Zwraca True gdy sukces, lub False gdy wystąpił błąd. W tym wypadku makro @error przyjmuje wartość różną od 0.

$hImageAttributes - uchwyt do obiektu ImageAttributes

$iColorAdjustType - kategorie, dla których klucz kolorów jest ustawiony lub wyczyszczony:

0 - korekta kolorów odnosi się do wszystkich kategorii, które nie mają regulacji ustawień własnych
1 - stosuje się do regulacji kolorów obrazów bitmapowych
2 - regulacja kolorów dotyczy operacji pędzla w metaplikach
3 - regulacja kolor dotyczy operacji na piórach w metaplikach
4 - regulacja kolorów dotyczy tekstów sporządzony w metaplikach

$bEnable - True oznacza, że stosowany jest transformacja, zdefiniowana w macierzy ColorMatrix

$tClrMatrix - struktura $tagGDIPCOLORMATRIX zawierająca dane matrycy transformacji kolorów

$tClrMatrix - struktura $tagGDIPCOLORMATRIX zawierająca dane matrycy transformacji w odcienie szarości

$iColorMatrixFlags - typ kolorów, na które będą miały wpływ macierze transformacji:

    0 - wszystkie wartości kolorów (w tym szarości) są regulowane przez tą samą macierz
    1 - kolory są korygowane, ale szare odcienie nie
    2 - kolory są regulowane przez jedną macierz, a odcienie szarości przez drugą

Przykład:

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

Const $iWidth = 500, $iHeight = 500

draw(0, "Kolory normalne")

$tMatrix = _GDIPlus_ColorMatrixCreateSaturation (10) ;tworzenie macierzy ColorMatrix
draw($tMatrix, "Zwiększone nasycenie kolorów")

$tMatrix = _GDIPlus_ColorMatrixCreateTranslate ( 0.1, -0.1, 0.1)
draw($tMatrix, "Zmiana intensywności kolorów")

$tMatrix = _GDIPlus_ColorMatrixCreateTranslate(-0.2, -0.2, -0.2)
draw($tMatrix, "Kolory przyciemnione")

$tMatrix = _GDIPlus_ColorMatrixCreateGrayScale ( )
draw($tMatrix, "Odcienie szarości")

Func draw($tColorMatrix, $sTxt)

   $hGUI = GUICreate($sTxt, $iWidth, $iHeight)
   GUISetState()

   _GDIPlus_Startup()
   $hGraphics = _GDIPlus_GraphicsCreateFromHWND($hGUI)
   $hIA = _GDIPlus_ImageAttributesCreate() ;tworzenie obiektu ImageAttributes

   ;zmiana atrybutów za pomocą macierzy ColorMatrix
   _GDIPlus_ImageAttributesSetColorMatrix($hIA, 0, True, $tColorMatrix, 0, 0)

   $hHBmp = _ScreenCapture_Capture("", 0, 0, $iWidth, $iHeight) ;zrzut fragmentu desktopu
   $hBitmap = _GDIPlus_BitmapCreateFromHBITMAP($hHBmp)

   ;rysowanie obrazka
   _GDIPlus_GraphicsDrawImageRectRect($hGraphics, $hBitmap, 0, 0, $iWidth, $iHeight, 0, 0, $iWidth, $iHeight, $hIA)

   Do
   Until GUIGetMsg() = $GUI_EVENT_CLOSE
   GUIDelete($hGUI)

   ;zwolnienie zasobów
   _WinAPI_DeleteObject($hHBmp)
   _GDIPlus_ImageAttributesDispose($hIA)
   _GDIPlus_GraphicsDispose($hGraphics)
   _GDIPlus_BitmapDispose($hBitmap)
   _GDIPlus_Shutdown()
EndFunc

Obiekt matrix - przekształcenia obiektów graficznych

[edytuj]

Obiekt matrix umożliwia dokonywanie transformacji obiektów graficznych (np. skalowanie, przesuwania i obroty). Za pomocą metod obiektu matrix możemy zdefiniować macierz transformacji. Sam proces transformacji odbywa się poprzez wymnożenie macierzy położeń przez macierz transformacji.


_GDIPlus_MatrixCreate

[edytuj]
#include <GDIPlus.au3>
_GDIPlus_MatrixCreate()

Funkcja tworzy obiekt matrix. Zwraca uchwyt do obiektu, lub 0 gdy wystąpił błąd.

Likwidacja obiektu za pomocą _GDIPlus_MatrixDispose.

Przykład jak dla _GDIPlus_MatrixTranslate.


_GDIPlus_MatrixClone

[edytuj]
#include <GDIPlus.au3>
_GDIPlus_MatrixClone ( $hMatrix )

Funkcja klonuje obiekt matrix. Zwraca uchwyt do utworzonego duplikatu obiektu, lub 0 gdy wystąpił błąd.

$hMatrix - uchwyt do klonowanego obiektu


_GDIPlus_MatrixDispose

[edytuj]
#include <GDIPlus.au3>
_GDIPlus_MatrixDispose($hMatrix)

Funkcja likwiduje obiekt matrix utworzony przez _GDIPlus_MatrixCreate. Zwraca TRUE gdy sukces, lub FALSE gdy wystąpił błąd.

$hMatrix - uchwyt do obiektu matrix


_GDIPlus_MatrixRotate

[edytuj]
#include <GDIPlus.au3>
_GDIPlus_MatrixRotate($hMatrix, $fAngle)

Funkcja definiuje w obiekcie matrix przekształcenie będące obrotem o zadany kąt. Zwraca TRUE gdy sukces, lub FALSE gdy wystąpił błąd.

$hMatrix - uchwyt do obiektu matrix

$fAngle - kąt obrotu w stopniach, wartość dodatnia to obrót w prawo, ujemna w lewo

Przykład jak dla _GDIPlus_MatrixTranslate.


_GDIPlus_MatrixScale

[edytuj]
#include <GDIPlus.au3>
_GDIPlus_MatrixScale($hMatrix, $fScaleX, $fScaleY)

Funkcja definiuje w obiekcie matrix przekształcenie będące skalowaniem o określony mnożnik. Zwraca TRUE gdy sukces, lub FALSE gdy wystąpił błąd.

$hMatrix - uchwyt do obiektu matrix

$fOffsetX, $fOffsetY - mnożnik skali w osi X i Y

Przykład jak dla _GDIPlus_MatrixTranslate.


_GDIPlus_MatrixShear

[edytuj]
#include <GDIPlus.au3>
_GDIPlus_MatrixShear ( $hMatrix, $fShearX, $fShearY [, $iOrder = 0] )

Funkcja definiuje w obiekcie matrix przekształcenie poprzez tzw. ścinanie (tworzona jest macierz ścinania). Zwraca TRUE gdy sukces, lub FALSE gdy wystąpił błąd.

Przekształcenie jest realizowane poprzez wymnożenie macierzy położeń przez macierz ścinania.

$hMatrix - uchwyt do obiektu matrix

$fShearX, $fShearY - współczynnik ścinania w osi X i Y

$iOrder - określa kolejność mnożenia macierzy, 0 - macierz pierwsza z lewej, 1 - macierz pierwsza z prawej, inna wartość powoduje, że mnożenie nie zostanie zrealizowane. Ponieważ mnożenie macierzy nie jest przemienne, najczęściej wynik transformacji będzie różny dla różnych wartości parametru.

UWAGA: Przekształcenie powoduje, że prostokątny obszar jest deformowany do kształtu równoległoboku. Zostają zachowane długości boków, natomiast same boki są skręcone o wartość zależną od parametrów $fShearX i $fShearY.

Przykład:

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

$hGUI = GUICreate("GDI+", 450, 200)
GUISetState()

_GDIPlus_Startup()
$hGraphic = _GDIPlus_GraphicsCreateFromHWND($hGUI)
_GDIPlus_GraphicsSetSmoothingMode($hGraphic, 2)

$hBrush = _GDIPlus_BrushCreateSolid(0xFFFFFF00)
$hPen = _GDIPlus_PenCreate(0xFF0000FF, 2)

;definiowanie ścieżki graficznej
$hPath = _GDIPlus_PathCreate()
$hFamily = _GDIPlus_FontFamilyCreate("Arial")
$tLayout = _GDIPlus_RectFCreate()
_GDIPlus_PathAddString($hPath, "AutoIt!", $tLayout, $hFamily, 0, 120, 0)
$aRect = _GDIPlus_PathGetWorldBounds($hPath)
_GDIPlus_PathAddRectangle( $hPath, $aRect[0], $aRect[1], $aRect[2], $aRect[3])

;definiowanie obiektu matrix
$hMatrix = _GDIPlus_MatrixCreate()
_GDIPlus_MatrixShear($hMatrix, 0.3, 0.15) ;definiowanie ścinania
_GDIPlus_PathTransform($hPath, $hMatrix)

;rysowanie ścieżki po transformacji
_GDIPlus_GraphicsFillPath($hGraphic, $hPath, $hBrush)
_GDIPlus_GraphicsDrawPath($hGraphic, $hPath, $hPen)

;rysowanie wyjściowego prostokąta
$hPen1 = _GDIPlus_PenCreate(0xFF000000, 1)
_GDIPlus_GraphicsDrawRect($hGraphic, $aRect[0], $aRect[1], $aRect[2], $aRect[3], $hPen1)

Do
Until GUIGetMsg() = $GUI_EVENT_CLOSE

;zwolnienie zasobów
_GDIPlus_MatrixDispose($hMatrix)
_GDIPlus_FontFamilyDispose($hFamily)
_GDIPlus_PathDispose($hPath)
_GDIPlus_PenDispose($hPen)
_GDIPlus_PenDispose($hPen1)
_GDIPlus_BrushDispose($hBrush)
_GDIPlus_GraphicsDispose($hGraphic)
_GDIPlus_Shutdown()


_GDIPlus_MatrixTranslate

[edytuj]
#include <GDIPlus.au3>
_GDIPlus_MatrixTranslate($hMatrix, $fOffsetX, $fOffsetY)

Funkcja definiuje w obiekcie matrix przekształcenie będące przesunięciem o określony offset. Zwraca TRUE gdy sukces, lub FALSE gdy wystąpił błąd.

$hMatrix - uchwyt do obiektu matrix

$fOffsetX, $fOffsetY - offset w pikselach o jaki będzie przesunięcie w osi X i Y

Przykład:

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

Dim $H = 500, $W = 500, $alfa = 30

;tworzenie GUI
$hGUI = GUICreate("GDI+", $H, $W)
GUISetState()

;inicjalizacja GDI+
_GDIPlus_Startup()

;tworzenie obiektu graphics w oknie GUI
$hGraphic = _GDIPlus_GraphicsCreateFromHWND($hGUI)

;wypisanie tekstu
_GDIPlus_GraphicsDrawString($hGraphic, "Tekst prosty", 10, 10)

;tworzenie obiektu matrix (nowy układ współrzędnych)
$hMatrix = _GDIPlus_MatrixCreate()

;zdefiniowanie przesunięcia do środka okna (w obiekcie matrix)
_GDIPlus_MatrixTranslate($hMatrix, $H/2, $W/2)

;przesunięcie układu współrzędnych
_GDIPlus_GraphicsSetTransform($hGraphic, $hMatrix)

For $i = 0 to 360-$alfa Step $alfa

   ;wpisanie tekstu w nowych współrzędnych
   _GDIPlus_GraphicsDrawString($hGraphic, "Tekst obrócony w prawo o " & _
                                        	$i & " stopni", 20, -10)

   ;obrócenie układu współrzędnych (w obiekcie matrix)
   _GDIPlus_MatrixRotate($hMatrix, $alfa)

   ;przeskalowanie układu współrzędnych (w obiekcie matrix)
   _GDIPlus_MatrixScale($hMatrix, 0.96, 0.96)

   ;inicjalizacja nowego układu współrzędnych (w obiekcie graphics)
   _GDIPlus_GraphicsSetTransform($hGraphic, $hMatrix)
   
Next

Do
Until GUIGetMsg() = $GUI_EVENT_CLOSE

;zwolnienie zasobów
_GDIPlus_MatrixDispose($hMatrix)
_GDIPlus_GraphicsDispose($hGraphic)
_GDIPlus_Shutdown()


_GDIPlus_MatrixTransformPoints

[edytuj]
#include <GDIPlus.au3>
_GDIPlus_MatrixTransformPoints ( $hMatrix, ByRef $aPoints )

Funkcja mnoży każdy punkt w tablicy przez macierz transformacji. Zwraca True gdy sukces, lub False gdy wystąpił błąd.

Wynik transformacji zwracany jest przez referencję w tablicy danych.

$hMatrix - uchwyt do obiektu matrix

$aPoints - dwuwymiarowa tablica ze współrzędnymi punktów do transformacji:

[0][0] - Number of points
[1][0] - punkt 1, współrzędna X
[1][1] - punkt 1, współrzędna Y
[2][0] - punkt 2, współrzędna X
[2][1] - punkt 2, współrzędna Y
  ...
[n][0] - punkt n, współrzędna X
[n][1] - punkt n, współrzędna Y

Przykład:

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

Local $aGui[13], $aPoints[13][2] = [[12]]

For $i = 1 To 12
   $aPoints[$i][0] = Cos(5 * $i / 15) * @DesktopHeight / 3 + @DesktopWidth / 2
   $aPoints[$i][1] = Sin(5 * $i / 15) * @DesktopHeight / 3 + @DesktopHeight / 2
   $aGui[$i] = GUICreate($i, 180, 160, $aPoints[$i][0] - 60, $aPoints[$i][1] - 50)
   GUISetBkColor(0xA0)
   GUISetState()
Next

sleep(1000)

_GDIPlus_Startup()
$hMatrix = _GDIPlus_MatrixCreate()
_GDIPlus_MatrixTranslate($hMatrix, -@DesktopWidth / 2, -@DesktopHeight / 2)
_GDIPlus_MatrixRotate($hMatrix, 1, True)
_GDIPlus_MatrixTranslate($hMatrix, @DesktopWidth / 2, @DesktopHeight / 2, True)

Do
   Sleep(40)
   _GDIPlus_MatrixTransformPoints($hMatrix, $aPoints)
   For $i = 1 To 12
      WinMove($aGui[$i], "", $aPoints[$i][0] - 60, $aPoints[$i][1] - 50)
   Next
Until GUIGetMsg() = $GUI_EVENT_CLOSE

_GDIPlus_MatrixDispose($hMatrix)
_GDIPlus_Shutdown()


_GDIPlus_MatrixInvert

[edytuj]
#include <GDIPlus.au3>
_GDIPlus_MatrixInvert ( $hMatrix )

Funkcja zastępuje elementy macierzy przekształceń, elementami przeciwnymi. Powoduje to zmianę przekształceń zdefiniowanych w obiekcie matrix na odwrotne. Zwraca True gdy sukces, lub False gdy wystąpił błąd.

$hMatrix - uchwyt do obiektu matrix

Przykład:

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

AutoItSetOption("MouseCoordMode", 2) ;współrzędne myszy względem obszaru roboczego okna

$hGUI = GUICreate("GDI+", 500, 600)
GUISetState()

_GDIPlus_Startup()

;tworzenie dwu obiektów Graphics
$hGraphics1 = _GDIPlus_GraphicsCreateFromHWND($hGUI)
$hGraphics2 = _GDIPlus_GraphicsCreateFromHWND($hGUI)

;tworzenie ścieżki
$hPath = _GDIPlus_PathCreate()
_GDIPlus_PathAddRectangle($hPath, 100, 100, 170, 70)

;tworzenie obiektu Matrix
$hMatrix = _GDIPlus_MatrixCreate()
_GDIPlus_MatrixScale($hMatrix, 2, 2)
_GDIPlus_MatrixRotate($hMatrix, 40)
_GDIPlus_MatrixTranslate($hMatrix, 50, -60)

;zmiana układu współrzędnych w drugim obiekcie Graphics
_GDIPlus_GraphicsSetTransform($hGraphics2, $hMatrix)

;odwrócenie przekształceń w obiekcie Matrix
_GDIPlus_MatrixInvert($hMatrix)

$hPen = _GDIPlus_PenCreate(0xFFF00000, 2)
Dim $aMouse[2][2] = [[1]]
$iTimer = TimerInit()

Do
   If TimerDiff($iTimer) > 10 Then
      $aMouse[1][0] = MouseGetPos(0)
      $aMouse[1][1] = MouseGetPos(1)
      ;czyszczenie okna, gdy lewy przycisk myszy nie jest wciśnięty
      If Not GUIGetCursorInfo($hGUI)[2] Then _GDIPlus_GraphicsClear($hGraphics1, 0xFFFFFFFF)
      _GDIPlus_GraphicsDrawPath($hGraphics1, $hPath)
      _GDIPlus_GraphicsDrawPath($hGraphics2, $hPath)
      _GDIPlus_MatrixTransformPoints($hMatrix, $aMouse) ;transformacja współrzędnych punktu
      _GDIPlus_GraphicsDrawEllipse($hGraphics1, $aMouse[1][0]-3, $aMouse[1][1]-3, 6, 6, $hPen)
      _GDIPlus_GraphicsDrawEllipse($hGraphics2, $aMouse[1][0]-3, $aMouse[1][1]-3, 6, 6, $hPen)
      $iTimer = TimerInit()
   EndIf
Until GUIGetMsg() = $GUI_EVENT_CLOSE

;zwolnienie zasobów
_GDIPlus_PenDispose($hPen)
_GDIPlus_MatrixDispose($hMatrix)
_GDIPlus_GraphicsDispose($hGraphics1)
_GDIPlus_GraphicsDispose($hGraphics1)
_GDIPlus_Shutdown()


_GDIPlus_MatrixMultiply

[edytuj]
#include <GDIPlus.au3>
_GDIPlus_MatrixMultiply ( $hMatrix1, $hMatrix2 [, $iOrder = 0] )

Funkcja powoduje wymnożenie macierzy transformacji dwóch obiektów matrix. Jest to równoznaczne ze złożeniem przekształceń opisanych tymi macierzami. Rezultat złożenia zostanie przez referencję zapisany w macierzy transformacji pierwszego obiektu matrix. Funkcja zwraca True gdy sukces, lub False gdy wystąpił błąd.

$hMatrix1 - uchwyt do pierwszego obiektu matrix, macierz przekształceń tego obiektu zostanie zaktualizowana

$hMatrix2 - uchwyt do drugiego obiektu matrix, macierz przekształceń tego obiektu zostanie bez zmian

$iOrder - określa kolejność mnożenia macierzy, 0 - macierz pierwsza z lewej, 1 - macierz pierwsza z prawej, inna wartość powoduje, że mnożenie nie zostanie zrealizowane. Ponieważ mnożenie macierzy nie jest przemienne, najczęściej wynik transformacji będzie różny dla różnych wartości parametru.

Przykład:

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

;tworzenie GUI
$hGUI = GUICreate("GDI+", 900, 900)
GUISetState()

_GDIPlus_Startup()
$hGraphic = _GDIPlus_GraphicsCreateFromHWND($hGUI)

;tworzenie zasobów
$hPath = _GDIPlus_PathCreate()
_GDIPlus_PathAddEllipse($hPath, 20, 80, 200, 90)
$hFamily = _GDIPlus_FontFamilyCreate("Arial")
$tLayout = _GDIPlus_RectFCreate(30,90)
_GDIPlus_PathAddString($hPath, "AutoIt", $tLayout, $hFamily, 0, 60)
$hPen = _GDIPlus_PenCreate(0xFF0000A0, 2)

;rysowanie wyjściowej grafiki
_GDIPlus_GraphicsDrawPath($hGraphic, $hPath, $hPen)

;tworzenie obiektów matrix
$hMatrix_Scale = _GDIPlus_MatrixCreate()
_GDIPlus_MatrixTranslate($hMatrix_Scale, -400, -550)
_GDIPlus_MatrixScale($hMatrix_Scale, .95, .95, True)
$hMatrix_Rotate = _GDIPlus_MatrixCreate()
_GDIPlus_MatrixRotate($hMatrix_Rotate, 20, True)

;pętla rysująca, w której następuje złożenie przkształceń opisanych
;w dwóch obiektach matrix, skalowania i obrotu
For $i = 1 To 40
   $hMatrix_Clone = _GDIPlus_MatrixClone($hMatrix_Rotate)
   _GDIPlus_MatrixMultiply($hMatrix_Clone, $hMatrix_Scale)
   _GDIPlus_MatrixTranslate($hMatrix_Clone, 400, 550, True)
   _GDIPlus_PathTransform($hPath, $hMatrix_Clone)
   _GDIPlus_GraphicsDrawPath($hGraphic, $hPath, $hPen)
   _GDIPlus_MatrixDispose($hMatrix_Clone)
Next

Do
Until GUIGetMsg() = $GUI_EVENT_CLOSE

;zwolnienie zasobów
_GDIPlus_MatrixDispose($hMatrix_Rotate)
_GDIPlus_MatrixDispose($hMatrix_Scale)
_GDIPlus_PathDispose($hPath)
_GDIPlus_PenDispose($hPen)
_GDIPlus_FontFamilyDispose($hFamily)
_GDIPlus_GraphicsDispose($hGraphic)
_GDIPlus_Shutdown()


ColorMatrix - macierz transformacji kolorów

[edytuj]

Obiekt ColorMatrix zawiera macierz kolorów i kilka metod (funkcji), za pomocą których można dokonywać transformacji kolorów obrazu w oparci o dane zawarte w tej macierzy.

Poniżej opisano kilka funkcji służących do tworzenia tego typu macierzy. Wszystkie zwracają dane macierzy w postaci struktury typu $tagGDIPCOLORMATRIX.

Same funkcje nie powodują żadnych zmian w obrazie. Tworzą tylko macierze, których można użyć do transformacji barwnej obrazów funkcją _GDIPlus_ImageAttributesSetColorMatrix.

Przykład użycia macierzy w podrozdziale Manipulowanie atrybutami obrazu.


_GDIPlus_ColorMatrixCreate

[edytuj]
#include <GDIPlus.au3>
_GDIPlus_ColorMatrixCreate ( )

Funkcja tworzy i inicjuje macierz transformacji kolorów. Zwraca strukturę $tagGDIPCOLORMATRIX zawierającą dane macierzy. Zainicjowana macierz zawiera dane, które nie powodują żadnej transformacji.


_GDIPlus_ColorMatrixCreateGrayScale

[edytuj]
#include <GDIPlus.au3>
_GDIPlus_ColorMatrixCreateGrayScale ( )

Funkcja tworzy i inicjuje macierz transformacji kolorów. Zwraca strukturę $tagGDIPCOLORMATRIX zawierającą dane macierzy. Zainicjowana macierz zawiera dane, które powodują przekształcenie kolorów w odcienie szarości.


_GDIPlus_ColorMatrixCreateNegative

[edytuj]
#include <GDIPlus.au3>
_GDIPlus_ColorMatrixCreateNegative ( )

Funkcja tworzy i inicjuje macierz transformacji kolorów. Zwraca strukturę $tagGDIPCOLORMATRIX zawierającą dane macierzy. Zainicjowana macierz zawiera dane, które powodują przekształcenie kolorów w negatyw.


_GDIPlus_ColorMatrixCreateSaturation

[edytuj]
#include <GDIPlus.au3>
_GDIPlus_ColorMatrixCreateSaturation ( $fSat )

Funkcja tworzy i inicjuje macierz transformacji kolorów. Zwraca strukturę $tagGDIPCOLORMATRIX zawierającą dane macierzy. Zainicjowana macierz zawiera dane, które powodują przekształcenie ze zmianą nasycenia kolorów.

$fSat - współczynnik nasycenia kolorów, 0 - odcienie szarości


_GDIPlus_ColorMatrixCreateScale

[edytuj]
#include <GDIPlus.au3>
_GDIPlus_ColorMatrixCreateScale ( $fRed, $fGreen, $fBlue [, $fAlpha = 1] )

Funkcja tworzy i inicjuje macierz transformacji kolorów. Zwraca strukturę $tagGDIPCOLORMATRIX zawierającą dane macierzy. Zainicjowana macierz zawiera dane, które powodują przekształcenie ze zmianą intensywności składowych kolorów i stopnia przezroczystości. Odbywa się to poprzez wymnożenie składowej przez podany współczynnik.

$fRed, $fGreen, $fBlue - mnożniki zmiany intensywności kolorów składowych RGB, 1 - bez zmiany intensywności

$fAlpha - mnożnik współczynnika przezroczystości, 1 (domyślnie) - bez zmiany przezroczystości


_GDIPlus_ColorMatrixCreateTranslate

[edytuj]
#include <GDIPlus.au3>
_GDIPlus_ColorMatrixCreateTranslate ( $fRed, $fGreen, $fBlue [, $fAlpha = 0] )

Funkcja tworzy i inicjuje macierz transformacji kolorów. Zwraca strukturę $tagGDIPCOLORMATRIX zawierającą dane macierzy. Zainicjowana macierz zawiera dane, które powodują przekształcenie ze zmianą intensywności składowych kolorów i stopnia przezroczystości.

$fRed, $fGreen, $fBlue - zmiany intensywności kolorów składowych RGB, -1 - brak koloru, 0 - bez zmiany intensywności, 1 - intensywność maksymalna

$fAlpha - zmiana współczynnika przezroczystości, -1 - przezroczystość całkowita, 0 - bez zmiany przezroczystości, 1 - całkowita nieprzezroczystość

Uzyskanie informacji o obrazie

[edytuj]

_GDIPlus_ImageGetFlags

[edytuj]
#include <GDIPlus.au3>
_GDIPlus_ImageGetFlags($hImage)

Funkcja zwraca dwuelementową tablicę z danymi pikseli obrazu, lub pustą tablicę gdy wystąpił błąd.

[0] - flaga typu Integer atrybutów pikseli
[1] - ciąg atrybutów pikseli oddzielonych separatorem "|"

$hImage - uchwyt do obiektu image

Przykład:

 
#include <GDIPlus.au3>

;ścieżka do testowego obrazka
$fImage = "c:\Windows\Microsoft.NET\Framework\v4.0.30319\SetupCache\Client\watermark.bmp"

_GDIPlus_Startup()
$hImage = _GDIPlus_ImageLoadFromFile($fImage)
$aFlag = _GDIPlus_ImageGetFlags($hImage)

MsgBox(0, "_GDIPlus_ImageGetFlags", $aFlag[0] & @LF & $aFlag[1])

_GDIPlus_Shutdown()


_GDIPlus_ImageGetHeight

[edytuj]
#include <GDIPlus.au3>
_GDIPlus_ImageGetHeight($hImage)

Funkcja zwraca wysokość obrazu w pikselach, lub -1 gdy wystąpił błąd.

$hImage - uchwyt do obiektu image

Przykład:

 
#include <GDIPlus.au3>

;ścieżka do testowego obrazka
$fImage = "c:\Windows\Microsoft.NET\Framework\v4.0.30319\SetupCache\Client\watermark.bmp"

_GDIPlus_Startup()
$hImage = _GDIPlus_ImageLoadFromFile($fImage)
$nHeight = _GDIPlus_ImageGetHeight($hImage)

MsgBox(0, "_GDIPlus_ImageGetHeight", "Wysokość obrazu = " & $nHeight &" pikseli")

_GDIPlus_Shutdown()


_GDIPlus_ImageGetWidth

[edytuj]
#include <GDIPlus.au3>
_GDIPlus_ImageGetWidth($hImage)

Funkcja zwraca wysokość obrazu w pikselach, lub -1 gdy wystąpił błąd.

$hImage - uchwyt do obiektu image

Przykład:

 
#include <GDIPlus.au3>

;ścieżka do testowego obrazka
$fImage = "c:\Windows\Microsoft.NET\Framework\v4.0.30319\SetupCache\Client\watermark.bmp"

_GDIPlus_Startup()
$hImage = _GDIPlus_ImageLoadFromFile($fImage)
$nWidth = _GDIPlus_ImageGetWidth($hImage)

MsgBox(0, "_GDIPlus_ImageGetWidtht", "Szerokość obrazu = " & $nWidth &" pikseli")

_GDIPlus_Shutdown()


_GDIPlus_ImageGetHorizontalResolution

[edytuj]
#include <GDIPlus.au3>
_GDIPlus_ImageGetHorizontalResolution($hImage)

Funkcja zwraca poziomą rozdzielczość obrazu w pikselach na cal (DPI), lub 0 gdy wystąpił błąd.

$hImage - uchwyt do obiektu image

Przykład:

 
#include <GDIPlus.au3>

;ścieżka do testowego obrazka
$fImage = "c:\Windows\Microsoft.NET\Framework\v4.0.30319\SetupCache\Client\watermark.bmp"

_GDIPlus_Startup()
$hImage = _GDIPlus_ImageLoadFromFile($fImage)
$nHDPI= _GDIPlus_ImageGetHorizontalResolution($hImage)

MsgBox(0, "_GDIPlus_ImageGetHorizontalResolution", "Rozdzielczość pozioma = " & $nHDPI &" DPI")

_GDIPlus_Shutdown()


_GDIPlus_ImageGetVerticalResolution

[edytuj]
#include <GDIPlus.au3>
_GDIPlus_ImageGetVerticalResolution($hImage)

Funkcja zwraca pionową rozdzielczość obrazu w pikselach na cal (DPI), lub 0 gdy wystąpił błąd.

$hImage - uchwyt do obiektu image

Przykład:

 
#include <GDIPlus.au3>

;ścieżka do testowego obrazka
$fImage = "c:\Windows\Microsoft.NET\Framework\v4.0.30319\SetupCache\Client\watermark.bmp"

_GDIPlus_Startup()
$hImage = _GDIPlus_ImageLoadFromFile($fImage)
$nVDPI= _GDIPlus_ImageGetVerticalResolution($hImage)

MsgBox(0, "_GDIPlus_ImageGetVerticalResolution", "Rozdzielczość pozioma = " & $nVDPI &" DPI")

_GDIPlus_Shutdown()


_GDIPlus_ImageGetPixelFormat

[edytuj]
#include <GDIPlus.au3>
_GDIPlus_ImageGetPixelFormat($hImage)

Funkcja zwraca jednowymiarową tablicę z informacjami o formacie pikseli obrazu. Jeżeli wystąpił błąd to zwracana tablica jest pusta.

[0] - liczbowy kod formatu
[1] - string z nazwą formatu, np. 24 Bpp RGB

$hImage - uchwyt do obiektu image

Przykład:

 
#include <GDIPlus.au3>

;ścieżka do testowego obrazka
$fImage = "c:\Windows\Microsoft.NET\Framework\v4.0.30319\SetupCache\Client\watermark.bmp"

_GDIPlus_Startup()
$hImage = _GDIPlus_ImageLoadFromFile($fImage)
$aFlag = _GDIPlus_ImageGetPixelFormat($hImage)

MsgBox(0, "_GDIPlus_ImageGetPixelFormat", "Kod formatu pikseli = " & $aFlag[0] & @LF _
					   & "Nazwa formatu pikseli = " & $aFlag[1])

_GDIPlus_Shutdown()


_GDIPlus_ImageGetRawFormat

[edytuj]
#include <GDIPlus.au3>
_GDIPlus_ImageGetRawFormat($hImage)

Funkcja zwraca jednowymiarową tablicę z identyfikatorem i nazwą formatu obrazu. Jeżeli wystąpił błąd to zwracana tablica jest pusta.

[0] - string identyfikatorem formatu GUID, np. {B96B3CAE-0728-11D3-9D7B-0000F81EF32E}
[1] - string z nazwą formatu obrazu, np. JPEG

$hImage - uchwyt do obiektu image

Przykład:

 
#include <GDIPlus.au3>

;ścieżka do testowego obrazka
$fImage = "c:\Windows\Microsoft.NET\Framework\v4.0.30319\SetupCache\Client\watermark.bmp"

_GDIPlus_Startup()
$hImage = _GDIPlus_ImageLoadFromFile($fImage)
$aFlag = _GDIPlus_ImageGetRawFormat($hImage)

MsgBox(0, "_GDIPlus_ImageGetRawFormat", "Identyfikator GUID formatu obrazu = " & $aFlag[0] & @LF _
					 & "Nazwa formatu obrazu = " & $aFlag[1])

_GDIPlus_Shutdown()


_GDIPlus_ImageGetType

[edytuj]
#include <GDIPlus.au3>
_GDIPlus_ImageGetType($hImage)

Funkcja zwraca kod typu obrazu (bitmapa lub metaplik), lub -1 gdy wystąpił błąd.

0 - typ nieznany 
1 - bitmapa typu: BMP, PNG, GIF, JPEG, TIFF, ICO, EXIF 
2 - metaplik typu: EMF, WMF 

$hImage - uchwyt do obiektu image

Przykład:

 
#include <GDIPlus.au3>

;ścieżka do testowego obrazka
$fImage = "c:\Windows\Microsoft.NET\Framework\v4.0.30319\SetupCache\Client\watermark.bmp"

_GDIPlus_Startup()
$hImage = _GDIPlus_ImageLoadFromFile($fImage)
$nType = _GDIPlus_ImageGetType($hImage)

If $nType = 0 Then $TypeStr = " (nieznany)"
If $nType = 1 Then $TypeStr = " (bitmapa)"
If $nType = 2 Then $TypeStr = " (metaplik)"

MsgBox(0, "_GDIPlus_ImageGetTypet", "Kod typu obrazu = " & $nType & $TypeStr)

_GDIPlus_Shutdown()

Dekodery i enkodery

[edytuj]

_GDIPlus_Decoders

[edytuj]
#include <GDIPlus.au3>
_GDIPlus_Decoders()

Funkcja zwraca tablicę z informacjami o dostępnych dekoderach obrazu. Jeżeli wystąpił błąd makro @error przyjmuje wartość różną od 0.

[0][0]  - liczba dekoderów

[1][1]  - identyfikator kodeka
[1][2]  - identyfikator formatu pliku
[1][3]  - nazwa kodeka
[1][4]  - dll, w których znajduje się kod
[1][5]  - nazwa formatu pliku używanego przez kodek
[1][6]  - rozszerzenia związane z kodekiem
[1][7]  - MIME (Internet media type) kodeka
[1][8]  - flaga
[1][9]  - wersja kodeka
[1][10] - liczba podpisów używanych przez format
[1][11] - liczba bajtów w każdym podpisie
[1][12] - wskaźnik do wzoru dla każdej sygnatury
[1][13] - wskaźnik do maski dla każdego podpisu

[2][1]  - dalej dla następnego dekodera
              ...

Przykład:

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

Dim $txt, $i, $aDecoders

;odczytanie danych kodeków
_GDIPlus_Startup()
$aDecoders = _GDIPlus_Decoders()
_GDIPlus_Shutdown()

;formatowanie danych
For $i=1 To $aDecoders[0][0]
   $txt &= "DEKODER " & $i & @CRLF
   $txt &= "Identyfikator kodeka: " & $aDecoders[$i][1] & @CRLF
   $txt &= "Iidentyfikator formatu pliku: " & $aDecoders[$i][2] & @CRLF
   $txt &= "Nazwa kodeka: " & $aDecoders[$i][3] & @CRLF
   $txt &= "DLL w których znajduje się kod: " & $aDecoders[$i][4] & @CRLF
   $txt &= "Nazwa formatu pliku używanego przez kodek: " & $aDecoders[$i][5] & @CRLF
   $txt &= "Rozszerzenia związane z kodekiem: " & $aDecoders[$i][6] & @CRLF
   $txt &= "MIME (Internet media type) kodeka: " & $aDecoders[$i][7] & @CRLF
   $txt &= "Flaga: " & $aDecoders[$i][8] & @CRLF
   $txt &= "Wersja kodeka: " & $aDecoders[$i][9] & @CRLF
   $txt &= "Liczba podpisów używanych przez format: " & $aDecoders[$i][10] & @CRLF
   $txt &= "Liczba bajtów w każdym podpisie: " & $aDecoders[$i][11] & @CRLF
   $txt &= "Wskaźnik do wzoru dla każdej sygnatury: " & $aDecoders[$i][12] & @CRLF
   $txt &= "Wskaźnik do maski dla każdego podpisu: " & $aDecoders[$i][13] & @CRLF & @CRLF
Next

;wyświetlenie danych na ekranie w kontrolce EDIT
GUICreate("Dane dekoderów:", 400, 800, -1, 50)
GUICtrlCreateEdit($txt, 10, 10, 380, 750, $WS_VSCROLL + $ES_READONLY)
GUISetState()
Do
Until GUIGetMsg() = $GUI_EVENT_CLOSE


_GDIPlus_DecodersGetCount

[edytuj]
#include <GDIPlus.au3>
_GDIPlus_DecodersGetCount()

Funkcja zwraca ilość dostępnych dekoderów obrazu, lub -1 gdy wystąpił błąd.

Przykład:

 
#include <GDIPlus.au3>

_GDIPlus_Startup()
MsgBox(0, "_GDIPlus_DecodersGetCount", "Ilość dekoderów: " & _GDIPlus_DecodersGetCount())
_GDIPlus_Shutdown()


_GDIPlus_Encoders

[edytuj]
#include <GDIPlus.au3>
_GDIPlus_Encoders()

Funkcja zwraca tablicę z informacjami o dostępnych enkoderach obrazu. Jeżeli wystąpił błąd makro @error przyjmuje wartość różną od 0.

[0][0]  - liczba dekoderów

[1][1]  - identyfikator kodeka
[1][2]  - identyfikator formatu pliku
[1][3]  - nazwa kodeka
[1][4]  - dll, w których znajduje się kod
[1][5]  - nazwa formatu pliku używanego przez kodek
[1][6]  - rozszerzenia związane z kodekiem
[1][7]  - MIME (Internet media type) kodeka
[1][8]  - flaga
[1][9]  - wersja kodeka
[1][10] - liczba podpisów używanych przez format
[1][11] - liczba bajtów w każdym podpisie
[1][12] - wskaźnik do wzoru dla każdej sygnatury
[1][13] - wskaźnik do maski dla każdego podpisu

[2][1]  - dalej dla następnego dekodera
              ...

Przykład:

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

Dim $txt, $i, $aEncoders

;odczytanie danych kodeków
_GDIPlus_Startup()
$aEncoders = _GDIPlus_Encoders()
_GDIPlus_Shutdown()

;formatowanie danych
For $i=1 To $aEncoders[0][0]
   $txt &= "ENKODER" & $i & @CRLF
   $txt &= "Identyfikator kodeka: " & $aEncoders[$i][1] & @CRLF
   $txt &= "Iidentyfikator formatu pliku: " & $aEncoders[$i][2] & @CRLF
   $txt &= "Nazwa kodeka: " & $aEncoders[$i][3] & @CRLF
   $txt &= "DLL w których znajduje się kod: " & $aEncoders[$i][4] & @CRLF
   $txt &= "Nazwa formatu pliku używanego przez kodek: " & $aEncoders[$i][5] & @CRLF
   $txt &= "Rozszerzenia związane z kodekiem: " & $aEncoders[$i][6] & @CRLF
   $txt &= "MIME (Internet media type) kodeka: " & $aEncoders[$i][7] & @CRLF
   $txt &= "Flaga: " & $aEncoders[$i][8] & @CRLF
   $txt &= "Wersja kodeka: " & $aEncoders[$i][9] & @CRLF
   $txt &= "Liczba podpisów używanych przez format: " & $aEncoders[$i][10] & @CRLF
   $txt &= "Liczba bajtów w każdym podpisie: " & $aEncoders[$i][11] & @CRLF
   $txt &= "Wskaźnik do wzoru dla każdej sygnatury: " & $aEncoders[$i][12] & @CRLF
   $txt &= "Wskaźnik do maski dla każdego podpisu: " & $aEncoders[$i][13] & @CRLF & @CRLF
Next

;wyświetlenie danych na ekranie w kontrolce EDIT
GUICreate("Dane dekoderów:", 400, 800, -1, 50)
GUICtrlCreateEdit($txt, 10, 10, 380, 750, $WS_VSCROLL + $ES_READONLY)
GUISetState()
Do
Until GUIGetMsg() = $GUI_EVENT_CLOSE


_GDIPlus_EncodersGetCount

[edytuj]
#include <GDIPlus.au3>
_GDIPlus_EncodersGetCount()

Funkcja zwraca ilość dostępnych dekoderów obrazu, lub -1 gdy wystąpił błąd.

Przykład:

 
#include <GDIPlus.au3>

_GDIPlus_Startup()
MsgBox(0, "_GDIPlus_EncodersGetCount", "Ilość enkoderów: " & _GDIPlus_EncodersGetCount())
_GDIPlus_Shutdown()


_GDIPlus_EncodersGetCLSID

[edytuj]
#include <GDIPlus.au3>
_GDIPlus_EncodersGetCLSID($sFileExt)

Funkcja zwraca identyfikator CLSID enkodera, lub pusty string gdy wystąpił błąd.

$sFileExt - rozszerzenie formatu, dla którego enkodera chcemy uzyskać identyfikator CLSID

Przykład:

 
#include <GDIPlus.au3>

_GDIPlus_Startup()
MsgBox(0, "_GDIPlus_EncodersGetCLSID", "CLSID dla enkodera BMP: " & _GDIPlus_EncodersGetCLSID("BMP") _
			       & @LF & "CLSID dla enkodera JPG: " & _GDIPlus_EncodersGetCLSID("JPG") _
			       & @LF & "CLSID dla enkodera GIF: " & _GDIPlus_EncodersGetCLSID("GIF") _
			       & @LF & "CLSID dla enkodera TIF: " & _GDIPlus_EncodersGetCLSID("TIF") _
			       & @LF & "CLSID dla enkodera PCX: " & _GDIPlus_EncodersGetCLSID("PCX"))
_GDIPlus_Shutdown()


Pędzle (Brush) - uzupełnienie

[edytuj]

Poniższa uwaga od wersji 3.3.10.2 AutoIt'a nie jest już prawdziwa. Twórcy języka uzupełnili UDF o obsługę pędzli wszystkich rodzajów. Pozostawiłem jednak podrozdział w celach edukacyjnych (Wasta).


Autor UDF'u "GDIPlus.au3" ograniczył się tylko do jednego rodzaju pędzla typu solid. Interfejs GDI+ zawiera jeszcze trzy inne rodzaje pędzli. W bardzo prosty sposób można użyć także ich w swoich skryptach.

Poniżej przedstawiam trzy proste funkcje do tworzenie pędzli typu: Hatch, Gradient, Texture. Wszystkie wykorzystują procedury biblioteki "gdiplus.dll".

Pędzel typu Hatch (kreskowanie)

[edytuj]

_GDIPlus_BrushCreateHatch

[edytuj]
_GDIPlus_BrushCreateHatch($iHatchStyle, $iArgbFore = 0xFF000000, $iArgbBack = 0xFFFFFFFF)

Funkcja tworzy pędzel z kreskowaniem. Zwraca uchwyt do pędzla, lub 0 gdy wystąpił błąd.

$iHatchStyle - styl kreskowania (zakres wartości od 0 do 52)

$iArgbFore - kolor wzoru w formacie AARRGGBB, domyślnie kolor czarny

$iArgbBack - kolor tła w formacie AARRGGBB, domyślnie kolor biały

Implementacja i przykład użycia:

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

$hGUI = GUICreate("GDI+", 580, 320)
GUISetState()

_GDIPlus_Startup()
$hGraphic = _GDIPlus_GraphicsCreateFromHWND($hGUI)


$hBrush1 = _GDIPlus_BrushCreateHatch(0)
_GDIPlus_GraphicsFillEllipse($hGraphic, 20, 30, 120, 250, $hBrush1)

$hBrush2 = _GDIPlus_BrushCreateHatch(3,0xFFFF0000, 0xFF00FF00)
_GDIPlus_GraphicsFillRect($hGraphic, 220, 30, 120, 250, $hBrush2)

$hBrush3 = _GDIPlus_BrushCreateHatch(52,0xFF0000FF, 0xFFFFFF00)
_GDIPlus_GraphicsFillRect($hGraphic, 420, 30, 120, 250, $hBrush3)

Do
Until GUIGetMsg() = $GUI_EVENT_CLOSE

_GDIPlus_BrushDispose($hBrush1)
_GDIPlus_BrushDispose($hBrush2)
_GDIPlus_BrushDispose($hBrush3)
_GDIPlus_GraphicsDispose($hGraphic)
_GDIPlus_Shutdown()


;implementacja
Func _GDIPlus_BrushCreateHatch($iHatchStyle, $ForeColor = 0xFF000000, $BackColor = 0xFFFFFFFF)
    Local $hHatchBrush
    If $ForeColor = -1 Or $ForeColor = Default Then $ForeColor = 0xFF000000
    If $BackColor = -1 Or $BackColor = Default Then $BackColor = 0xFFFFFFFF
    $hHatchBrush = DllCall("gdiplus.dll", "int", "GdipCreateHatchBrush", "int", $iHatchStyle, _
                                               "int", $ForeColor, "int", $BackColor, "int*", 0)
    Return $hHatchBrush[4]
EndFunc


Pędzel typu Gradient

[edytuj]

_GDIPlus_BrushCreateGradient

[edytuj]
_GDIPlus_BrushCreateGradient($sRect, $iArgb1 = 0xFF000000, $iArgb2 = 0xFFFFFFFF, $LinearGradientMode = 0, $WrapMode = 0)

Funkcja tworzy pędzel typu gradient. Zwraca uchwyt do pędzla, lub 0 gdy wystąpił błąd.

$sRect - struktura ($tagGDIPRECTF) zawierającą dane o położeniu i wielkości prostokątnego obszaru, w którym zawiera się pędzel gradientu. Można ją utworzyć za pomocą _GDIPlus_RectFCreate.

$iArgb1, $iArgb2 - dwa przenikające się kolory w formacie AARRGGBB, domyślnie kolory czarny i biały

$LinearGradientMode - kierunek gradientu: 0 - gradient w poziomie, 1 - w pionie, 2 - skośnie w lewo, 3 - skośnie w prawo

$WrapMode - określa, jak gradient jest rozmieszczany sąsiadująco, gdy jest mniejszy niż obszar wypełniany: 0 - bez symetrii, 1 - symetria w pionie, 2 - symetria w poziomie, 3 - symetria w poziomie i pionie

Implementacja i przykład użycia:

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

$hGUI = GUICreate("GDI+", 700, 320)
GUISetState()

_GDIPlus_Startup()
$hGraphic = _GDIPlus_GraphicsCreateFromHWND($hGUI)

$Rect = _GDIPlus_RectFCreate(100, 30, 120, 250)
$hBrush1 = _GDIPlus_BrushCreateGradient($Rect)
_GDIPlus_GraphicsFillEllipse($hGraphic, 100, 30, 120, 250, $hBrush1)

$Rect = _GDIPlus_RectFCreate(300, 30, 120, 250)
$hBrush2 = _GDIPlus_BrushCreateGradient($Rect, 0xFFFF0000, 0xFF0000FF, 1)
_GDIPlus_GraphicsFillEllipse($hGraphic, 300, 30, 120, 250, $hBrush2)

$Rect = _GDIPlus_RectFCreate(500, 30, 30, 20)
$hBrush3 = _GDIPlus_BrushCreateGradient($Rect, 0xFFFF0000, 0xFF00FF00, 3, 3)
_GDIPlus_GraphicsFillEllipse($hGraphic, 500, 30, 120, 250, $hBrush3)


Do
Until GUIGetMsg() = $GUI_EVENT_CLOSE

;zwolnienie zasobów
_GDIPlus_BrushDispose($hBrush1)
_GDIPlus_BrushDispose($hBrush2)
_GDIPlus_BrushDispose($hBrush3)
_GDIPlus_GraphicsDispose($hGraphic)
_GDIPlus_Shutdown()


;implementacja
Func _GDIPlus_BrushCreateGradient($sRect, $iArgb1 = 0xFF000000, $iArgb2 = 0xFFFFFFFF, _
                                      $LinearGradientMode = 0, $WrapMode = 0)
    Local $aRet
    If $iArgb1 = -1 Or $iArgb1 = Default Then $iArgb1 = 0xFF000000
    If $iArgb2 = -1 Or $iArgb2 = Default Then $iArgb2 = 0xFFFFFFFF
    If $LinearGradientMode = -1 Or $LinearGradientMode = Default Then $LinearGradientMode = 0
    If $WrapMode = -1 Or $WrapMode = Default Then $WrapMode = 0
    $aRet = DllCall("gdiplus.dll", "int", "GdipCreateLineBrushFromRect", "struct*", $sRect, "int", $iArgb1, _
                                "int", $iArgb2, "int", $LinearGradientMode, "int", $WrapMode, "int*", 0)
    Return $aRet[6]
EndFunc

Pędzel typu Teksture (tekstura)

[edytuj]

_GDIPlus_BrushCreateTexture

[edytuj]
_GDIPlus_BrushCreateTexture($Image, $iWrapMode = 0)

Funkcja tworzy pędzel z teksturą. Zwraca uchwyt do pędzla, lub 0 gdy wystąpił błąd.

$Image - nazwa pliku obrazu (ze ścieżką dostępu) lub uchwyt do obiektu Image

$iWrapMode - określa, jak tekstura jest rozmieszczana sąsiadująco, gdy jest mniejsza niż obszar wypełniany: 0 - bez symetrii, 1 - symetria w pionie, 2 - symetria w poziomie, 3 - symetria w poziomie i pionie, 4 - pojedynczy obrazek

Implementacja i przykład użycia:

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

$fImage = "c:\Windows\Microsoft.NET\Framework\v4.0.30319\SetupCache\Client\SplashScreen.bmp"
;tworzenie GUI
$hGUI = GUICreate("GDI+", 1000, 600)
GUISetState()

_GDIPlus_Startup()
$hGraphic = _GDIPlus_GraphicsCreateFromHWND($hGUI)


$Image = _GDIPlus_ImageLoadFromFile($fImage)
$hBrush =  _GDIPlus_BrushCreateTexture($Image, 3) ;tworzenie pędzla
_GDIPlus_GraphicsFillEllipse($hGraphic, 0, 0, 1000, 600, $hBrush)

Do
Until GUIGetMsg() = $GUI_EVENT_CLOSE

;zwolnienie zasobów
_GDIPlus_BrushDispose($hBrush)
_GDIPlus_GraphicsDispose($hGraphic)
_GDIPlus_Shutdown()


;implementacja
Func _GDIPlus_BrushCreateTexture($Image, $iWrapMode = 0)
   Local $hImage, $aResult
   Switch VarGetType($Image)
      Case "String"
         $hImage = _GDIPlus_ImageLoadFromFile($Image)
      Case "Ptr"
         $hImage = $Image
      Case Else
         Return 0
   EndSwitch
   $aResult = DllCall("gdiplus.dll", "uint", "GdipCreateTexture", "hwnd", $hImage, "int", $iWrapMode, "int*", 0)
   Return $aResult[3]
EndFunc

Przykład użycia biblioteki UDF GDIPlus.au3

[edytuj]

Na koniec prosty przykład użycia GDI+. Poniższy skrypt wyświetla na ekranie zegar analogowo-cyfrowy.

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

Dim $H = 400, $V = 400, $alfa = 30, $LS = 165, $LM =165, $LH = 140, $sec = -1
Dim $col_b = 0x666666, $Col_m = 0xFFFF0000, $Col_s = 0xFF00FFFF, $Col_c = 0xFF00FF00

;tworzenie GUI
$hGUI = GUICreate("GDI+: Zegar analogowo-cyfrowy", $H, $V, -1,-1)
GUISetBkColor($col_b)
GUISetState()

;inicjalizacja GDI+
_GDIPlus_Startup()

;tworzenie obiektu graphics w oknie GUI
$hGraphic = _GDIPlus_GraphicsCreateFromHWND($hGUI)
;włączenie wygładzania krawędzi
_GDIPlus_GraphicsSetSmoothingMode($hGraphic, 2)

;tworzenie piór
$hPen = _GDIPlus_PenCreate($Col_m, 6)
$hPen1 = _GDIPlus_PenCreate($Col_s, 4)
_GDIPlus_PenSetEndCap($hPen1, $GDIP_LINECAPROUNDANCHOR)

;tworzenie atrybutów tekstu (dla zegara cyfrowego)
$hFormat = _GDIPlus_StringFormatCreate()
_GDIPlus_StringFormatSetAlign($hFormat, 1)
$hFamily = _GDIPlus_FontFamilyCreate("Arial")
$hFont = _GDIPlus_FontCreate($hFamily, 38, 0, 0)
$tLayout = _GDIPlus_RectFCreate(-90, 50, 180, 40)

;tworzenie pędzli
$hBrush = _GDIPlus_BrushCreateSolid($Col_c)
$Rect = _GDIPlus_RectFCreate(-$H/2+20, -$V/2+20, $H-20, $V-20)
$hBrush2 = _GDIPlus_BrushCreateGradient($Rect, 0xFFFEFEFE, 0xFF000000, 3)

;przesunięcie układu współrzędnych do środka okna
$hMatrix = _GDIPlus_MatrixCreate()
_GDIPlus_MatrixTranslate($hMatrix, $H/2, $V/2)
_GDIPlus_GraphicsSetTransform($hGraphic, $hMatrix)

Do
   If $sec <> @SEC Then
      $hour = @HOUR
      $min = @MIN
      $sec = @SEC
      _GDIPlus_GraphicsFillEllipse($hGraphic, -170, -170, 340, 340, $hBrush2)
      _GDIPlus_GraphicsDrawStringEx($hGraphic, $hour & ":" & $min & ":" & _
                                 $sec, $hFont, $tLayout, $hFormat, $hBrush)
      DrawHand($hGraphic, $LH, $hour*5+$min/12, $hPen)
      DrawHand($hGraphic, $LM, $min, $hPen)
      DrawHand($hGraphic, $LS, $sec, $hPen1)
      For $i = 0 to 360-$alfa Step $alfa
         _GDIPlus_MatrixRotate($hMatrix, $alfa)
         _GDIPlus_GraphicsSetTransform($hGraphic, $hMatrix)
         _GDIPlus_GraphicsFillEllipse($hGraphic, 180, -5, 10, 10, $hBrush)
      Next
   EndIf
Until GUIGetMsg() = $GUI_EVENT_CLOSE

;zwolnienie zasobów
_GDIPlus_StringFormatDispose($hFormat)
_GDIPlus_FontDispose($hFont)
_GDIPlus_FontFamilyDispose($hFamily)
_GDIPlus_PenDispose($hPen)
_GDIPlus_PenDispose($hPen1)
_GDIPlus_BrushDispose($hBrush)
_GDIPlus_BrushDispose($hBrush2)
_GDIPlus_MatrixDispose($hMatrix)
_GDIPlus_GraphicsDispose($hGraphic)
_GDIPlus_Shutdown()

;funkcja rysująca wskazówki
Func DrawHand($hGraphic, $L, $poz, $hPen)
   Local $alfa = -3.1415*($poz+15)/30
   Local $x = -$L*Cos($alfa), $y = $L*Sin($alfa)
   _GDIPlus_GraphicsDrawLine($hGraphic, $x, $y, 0, 0, $hPen)
EndFunc

;funkcja _GDIPlus_BrushCreateGradient opisana w poprzednim rozdziale
Func _GDIPlus_BrushCreateGradient($sRect, $iArgb1 = 0xFF000000, $iArgb2 = 0xFFFFFFFF, _
                                      $LinearGradientMode = 0, $WrapMode = 0)
    Local $aRet
    If $iArgb1 = -1 Or $iArgb1 = Default Then $iArgb1 = 0xFF000000
    If $iArgb2 = -1 Or $iArgb2 = Default Then $iArgb2 = 0xFFFFFFFF
    If $LinearGradientMode = -1 Or Default Then $LinearGradientMode = 0
    If $WrapMode = -1 Or Default Then $WrapMode = 0
    $aRet = DllCall("gdiplus.dll", "int", "GdipCreateLineBrushFromRect", "struct*", $sRect, "int", $iArgb1, _
                                "int", $iArgb2, "int", $LinearGradientMode, "int", $WrapMode, "int*", 0)
    Return $aRet[6]
EndFunc