#include <GDIP.au3>
#include <GUIConstantsEx.au3>
#include <ScreenCapture.au3>

_Example()

Func _Example()
	Local $hGUI, $hGraphics, $hBmp, $hBitmap, $tPreHue, $tPostHue, $tColorMatrix, $pColorMatrix, $iWidth, $iHeight, $aSize
	Local $hBrightIA, $hHueIA, $hGrayIA, $hContIA

	; Инициализирует библиотеку GDI+
	_GDIPlus_Startup()

	; Создаёт GUI (нажмите ESC для выхода)
	$hGUI = GUICreate("", @DesktopWidth, @DesktopHeight)

	; Создаёт графический объект из дескриптора окна
	$hGraphics = _GDIPlus_GraphicsCreateFromHWND($hGUI)

	; Делает снимок экрана
	$hBmp = _ScreenCapture_Capture("", 0, 0, -1, -1, False)

	; Создаёт объект GDI+ Bitmap из объекта GDI Bitmap
	$hBitmap = _GDIPlus_BitmapCreateFromHBITMAP($hBmp)

	; Создаёт объект яркости ImageAttributes
	$hBrightIA = _GDIPlus_ImageAttributesCreate()
	; Создаёт объект тона ImageAttributes
	$hHueIA = _GDIPlus_ImageAttributesCreate()
	; Создаёт объект градаций серого ImageAttributes
	$hGrayIA = _GDIPlus_ImageAttributesCreate()
	; Создаёт объект контраста ImageAttributes
	$hContIA = _GDIPlus_ImageAttributesCreate()

	; Создаёт цветовую матрицу яркости
	$tColorMatrix = _GDIPlus_ColorMatrixCreateTranslate(0.5, 0.5, 0.5)
	$pColorMatrix = DllStructGetPtr($tColorMatrix)

	; Устанавливает яркость изображения, на 50% ярче
	_GDIPlus_ImageAttributesSetColorMatrix($hBrightIA, 0, True, $pColorMatrix)

	; Create the identity color matrix и цветовую матрицу тона
	$tColorMatrix = _GDIPlus_ColorMatrixCreate()
	$tPreHue = _GDIPlus_ColorMatrixCreate()
	$tPostHue = _GDIPlus_ColorMatrixCreate()
	_GDIPlus_ColorMatrixInitHue($tPreHue, $tPostHue)
	$pColorMatrix = DllStructGetPtr($tColorMatrix)

	; Устанавливает тон изображения с поворотом на 90 градусов
	_GDIPlus_ColorMatrixRotateHue($tColorMatrix, $tPreHue, $tPostHue, 90)
	_GDIPlus_ImageAttributesSetColorMatrix($hHueIA, 0, True, $pColorMatrix)

	; Создаёт цветовую матрицу градаций серого
	$tColorMatrix = _GDIPlus_ColorMatrixCreateGrayScale()
	$pColorMatrix = DllStructGetPtr($tColorMatrix)

	; Устанавливает цвета изображения в градации серого
	_GDIPlus_ImageAttributesSetColorMatrix($hGrayIA, 0, True, $pColorMatrix)

	; Создаёт цветовую матрицу контраста
	$tColorMatrix = _GDIPlus_ColorMatrixCreateScale(4, 4, 4)
	$pColorMatrix = DllStructGetPtr($tColorMatrix)

	; Исправляет цвета, вращением тона
	_GDIPlus_ColorMatrixRotateHue($tColorMatrix, $tPreHue, $tPostHue, 0)

	; Устанавливает контрастность изображения
	_GDIPlus_ImageAttributesSetColorMatrix($hContIA, 0, True, $pColorMatrix)

	GUISetState()

	; Получает размеры изображения
	$aSize = _GDIPlus_ImageGetDimension($hBitmap)
	$iWidth = $aSize[0]
	$iHeight = $aSize[1]

	; Устанавливает режим интерполяции, влияющий на качество
	_GDIPlus_GraphicsSetInterpolationMode($hGraphics, 7)

	; Рисует изображение устанавливая яркость
	_GDIPlus_GraphicsDrawImageRectRectIA($hGraphics, $hBitmap, 0, 0, $iWidth, $iHeight, 0, 0, @DesktopWidth/2, @DesktopHeight/2, $hBrightIA)

	; Рисует изображение устанавливая тон
	_GDIPlus_GraphicsDrawImageRectRectIA($hGraphics, $hBitmap, 0, 0, $iWidth, $iHeight, @DesktopWidth/2, 0, @DesktopWidth/2, @DesktopHeight/2, $hHueIA)

	; Рисует изображение устанавливая цветовую матрицу градаций серого
	_GDIPlus_GraphicsDrawImageRectRectIA($hGraphics, $hBitmap, 0, 0, $iWidth, $iHeight, 0, @DesktopHeight/2, @DesktopWidth/2, @DesktopHeight/2, $hGrayIA)

	; Рисует изображение устанавливая контраст
	_GDIPlus_GraphicsDrawImageRectRectIA($hGraphics, $hBitmap, 0, 0, $iWidth, $iHeight, @DesktopWidth/2, @DesktopHeight/2, @DesktopWidth/2, @DesktopHeight/2, $hContIA)

	Do
	Until GUIGetMsg() = $GUI_EVENT_CLOSE

	; Освобождает ресурсы
	_GDIPlus_ImageAttributesDispose($hContIA)
	_GDIPlus_ImageAttributesDispose($hGrayIA)
	_GDIPlus_ImageAttributesDispose($hHueIA)
	_GDIPlus_ImageAttributesDispose($hBrightIA)
	_WinAPI_DeleteObject($hBmp)
	_GDIPlus_ImageDispose($hBitmap)
	_GDIPlus_GraphicsDispose($hGraphics)

	; Закрывает библиотеку GDI+
	_GDIPlus_Shutdown()
EndFunc