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

_Example()

Func _Example()
	Local $hGUI, $hGraphics, $hRedBrush, $hGreenBrush, $hBlueBrush, $hBitmap, $hBitmapContext, $hIA, $iI, $iJ, $aRemapTable[4][2]

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

	$hGUI = GUICreate("С таблицей преобразования цветов", 420, 350)
	GUISetState()

	; Создаёт графический объект из дескриптора окна
	$hGraphics = _GDIPlus_GraphicsCreateFromHWND($hGUI)
	; Создаёт объект Bitmap и получает его графический контекст 
	$hBitmap = _GDIPlus_BitmapCreateFromScan0(200, 200)
	$hBitmapContext = _GDIPlus_ImageGetGraphicsContext($hBitmap)

	; Создаёт 3 кисти 3-х различных цветов: красный, зеленый и синий
	$hRedBrush = _GDIPlus_BrushCreateSolid(0xFFFF0000) ; Красный
	$hGreenBrush = _GDIPlus_BrushCreateSolid(0xFF00FF00) ; Зеленый
	$hBlueBrush = _GDIPlus_BrushCreateSolid(0xFF0000FF) ; Синий

	For $iI = 0 To 9
		For $iJ = 0 To 9
			Switch Random(1, 3, 1)
				Case 1
					_GDIPlus_GraphicsFillRect($hBitmapContext, $iI*20, $iJ*20, 20, 20, $hRedBrush)
				Case 2
					_GDIPlus_GraphicsFillRect($hBitmapContext, $iI*20, $iJ*20, 20, 20, $hGreenBrush)
				Case Else
					_GDIPlus_GraphicsFillRect($hBitmapContext, $iI*20, $iJ*20, 20, 20, $hBlueBrush)
			EndSwitch
		Next
	Next

	; Рисует объект изображения
	_GDIPlus_GraphicsDrawImage($hGraphics, $hBitmap, 0, 0)

	; Создаёт объект ImageAttribute для применения установок
	$hIA = _GDIPlus_ImageAttributesCreate()

	; Создание массива являющегося таблицей переназначения цветов
	$aRemapTable[0][0] = 3 ; 3 цвета
	; Заменяет красный голубым
	$aRemapTable[1][0] = 0xFFFF0000
	$aRemapTable[1][1] = 0xFF00FFFF
	; Заменяет зеленый синим
	$aRemapTable[2][0] = 0xFF00FF00
	$aRemapTable[2][1] = 0xFF0000FF
	; Заменяет синий желтым
	$aRemapTable[3][0] = 0xFF0000FF
	$aRemapTable[3][1] = 0xFFFFFF00

	; Устанавливает таблицу преобразования цветов
	_GDIPlus_ImageAttributesSetRemapTable($hIA, 1, True, $aRemapTable)

	; Рисует копию изображения с преобразованными цветами
	_GDIPlus_GraphicsDrawImageRectRectIA($hGraphics, $hBitmap, 0, 0, 200, 200, 220, 0, 200, 200, $hIA)

	Do
	Until GUIGetMsg() = $GUI_EVENT_CLOSE

	; Освобождает ресурсы
	_GDIPlus_ImageAttributesDispose($hIA)
	_GDIPlus_BrushDispose($hBlueBrush)
	_GDIPlus_BrushDispose($hGreenBrush)
	_GDIPlus_BrushDispose($hRedBrush)
	_GDIPlus_GraphicsDispose($hBitmapContext)
	_GDIPlus_BitmapDispose($hBitmap)
	_GDIPlus_GraphicsDispose($hGraphics)

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