Hi Leute ich bräuchte mal wieder eure Hilfe, es geht mir darum in einem Bitmapobject einen gewissen Farbcode durch einen
anderen zu ersetzen. Dazu habe ich schon eine Funktion geschrieben doch die ist mir viel zu langsam grade bei grossen Bildern.
Spoiler anzeigen
#include <GDIPlus.au3>
#include <Gdip.au3>
#include <array.au3>
_GDIPlus_Startup()
$file = FileOpenDialog("Image select", @ScriptDir, "Images (*.jpg;*.bmp;*.png)", 1 + 2)
If @error Then Exit
$hBitmap = _swap_image_color($file,"0xFFFFFFFF","0xFFFEFFFF")
[/autoit] [autoit][/autoit] [autoit][/autoit] [autoit][/autoit] [autoit]Func _swap_image_color($path,$searchcolor="0xFFFFFFFF",$swapcolor="0x00000000")
Local $hBitmap = _GDIPlus_BitmapCreateFromFile($path)
Local $width = _GDIPlus_ImageGetWidth($hBitmap)
Local $height = _GDIPlus_ImageGetHeight($hBitmap)
Local $d = $width*$height
Local $xi=0,$yi=0
Local $test = 0
For $i=0 To $d
$hc = _GDIPlus_BitmapGetPixel($hBitmap,$xi, $yi)
If "0x"&Hex($hc) = $searchcolor Then
_GDIPlus_BitmapSetPixel($hBitmap, $xi, $yi, $swapcolor)
$test+=1
EndIf
$xi += 1
If $xi = $width Then
$hc = _GDIPlus_BitmapGetPixel($hBitmap,$xi, $yi)
If "0x"&Hex($hc) = $searchcolor Then
_GDIPlus_BitmapSetPixel($hBitmap, $xi, $yi, $swapcolor)
$test+=1
EndIf
$xi=0
$yi+=1
EndIf
Next
MsgBox(0,"",$test & @CRLF & $d & @CRLF & $yi & @CRLF & $xi)
Return $hBitmap
EndFunc
_GDIPlus_ImageSaveToFile($hBitmap,@ScriptDir&"\Test.png")
_GDIPlus_Shutdown()
meine Frage gibts eine schnellere Variante ??