Du musst die Zeile 43 anpassen:
Code
_GDIPlus_BitmapConvertFormat($hImage, $GDIP_PXF08INDEXED, $GDIP_DitherTypeDualSpiral8x8, $GDIP_PaletteTypeFixedHalftone256, $tPalette)
Wenn $GDIP_PXF04INDEXED gewählt ist, dann sind nur 2^4 = 16 Farben vorgesehen.
Beispiel:
C
#include <GDIPlus.au3>
#include <GUIConstantsEx.au3>
#include <WindowsConstants.au3>
Global $sFile = FileOpenDialog("Selecet an image", "", "Images (*.jpg;*.png;*.bmp)")
If @error Then Exit MsgBox(16, "Error", "You must select an image!", 30)
_GDIPlus_Startup()
$hImage = _GDIPlus_ImageLoadFromFile($sFile)
$iW = _GDIPlus_ImageGetWidth($hImage)
$iH = _GDIPlus_ImageGetHeight($hImage)
$hGUI = GUICreate("GDI+ v1.1 needed", $iW * 2 + 30, $iH + 20)
GUISetState()
$hGraphics1 = _GDIPlus_GraphicsCreateFromHWND($hGUI)
_GDIPlus_GraphicsDrawImageRect($hGraphics1, $hImage, 10, 10, $iW, $iH)
_GDIPlus_GraphicsDispose($hGraphics1)
$iColors = 32
Local $tPalette = _GDIPlus_PaletteInitialize($iColors, $GDIP_PaletteTypeOptimal, $iColors, False, $hImage)
ConsoleWrite(@error & @CRLF)
_GDIPlus_BitmapConvertFormat($hImage, $GDIP_PXF08INDEXED, $GDIP_DitherTypeDualSpiral8x8, $GDIP_PaletteTypeFixedHalftone256, $tPalette)
DllCall($__g_hGDIPDll, "int", "GdipSetImagePalette", "handle", $hImage, "struct*", $tPalette)
$hDC = _WinAPI_GetDC($hGUI)
$hGraphics2 = _GDIPlus_GraphicsCreateFromHDC($hDC)
_GDIPlus_GraphicsDrawImageRect($hGraphics2, $hImage, $iW + 20, 10, $iW, $iH)
_GDIPlus_ImageSaveToFile($hImage, @ScriptDir & "\" & $iColors & ".png")
ShellExecute(@ScriptDir & "\" & $iColors & ".png")
Do
Switch GUIGetMsg()
Case $GUI_EVENT_CLOSE
_WinAPI_ReleaseDC($hGUI, $hDC)
_GDIPlus_GraphicsDispose($hGraphics2)
_GDIPlus_ImageDispose($hImage)
_GDIPlus_Shutdown()
GUIDelete()
Exit
EndSwitch
Until False
Alles anzeigen
