AutoIt/Funkcje interfejsu GDI+
Co to jest GDI?
edytujZa 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)
edytujOperacje 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
edytujPoniż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
edytujObiekt 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)
edytujPoniż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)
edytujPę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)
edytujPoniż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
edytujKilka 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)
edytujKilka 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
edytujGraphicsPathIterator 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)
edytujPoję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
edytujWstawianie 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
edytujZbió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
edytujBitmapa (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
edytujObiekt 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
edytujObiekt 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
edytujObiekt 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
edytujPoniż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
edytujNa 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