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

_Example()

Func _Example()
	Local $hGUI, $hGraphics, $hBrush, $hIA, $tColorPalette, $pColorPalette, $aRemap[2][2], $iI

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

	$hGUI = GUICreate("Настройка палитры", 400, 200)
	GUISetState()

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

	; Создаёт палитру, которая имеет четыре записи
	$tColorPalette = DllStructCreate("uint Flags;uint Count;uint Entries[4]")
	$pColorPalette = DllStructGetPtr($tColorPalette)

	DllStructSetData($tColorPalette, "Flags", 0)
	DllStructSetData($tColorPalette, "Count", 4)
	DllStructSetData($tColorPalette, "Entries", 0xFF00FFFF, 1) ; Aqua (голубой)
	DllStructSetData($tColorPalette, "Entries", 0xFF000000, 2) ; Чёрный
	DllStructSetData($tColorPalette, "Entries", 0xFFFF0000, 3) ; Красный
	DllStructSetData($tColorPalette, "Entries", 0xFF00FF00, 4) ; Зелёный

	; Создаёт кисть, чтобы заполнить внутреннее пространство прямоугольников
	$hBrush = _GDIPlus_BrushCreateSolid()

	; Отображает 4 цвета палитры без регулировки
	For $iI = 1 to 4
		_GDIPlus_BrushSetFillColor($hBrush, DllStructGetData($tColorPalette, "Entries", $iI))
		_GDIPlus_GraphicsFillRect($hGraphics, $iI*30, 10, 20, 20, $hBrush)
	Next

	; Создаёт таблицу подмены цветов, которая заменяет зелёные цвета синими
	$aRemap[0][0] = 1
	$aRemap[1][0] = 0xFF00FF00 ; Зелёный в качестве старого цвета
	$aRemap[1][1] = 0xFF0000FF ; Синий в качестве нового цвета

	; Создаёт объект ImageAttributes
	$hIA = _GDIPlus_ImageAttributesCreate()

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

	; Настройка палитры
	_GDIPlus_ImageAttributesGetAdjustedPalette($hIA, $pColorPalette, 1)

	; Отображает 4 цвета палитры после регулировки
	For $iI = 1 To 4
		_GDIPlus_BrushSetFillColor($hBrush, DllStructGetData($tColorPalette, "Entries", $iI))
		_GDIPlus_GraphicsFillRect($hGraphics, $iI*30, 40, 20, 20, $hBrush)
	Next

	Do
	Until GUIGetMsg() = $GUI_EVENT_CLOSE

	; Освобождает ресурсы
	_GDIPlus_BrushDispose($hBrush)
	_GDIPlus_ImageAttributesDispose($hIA)
	_GDIPlus_GraphicsDispose($hGraphics)

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