Code: Select all
G2 := Gdip_GraphicsFromImage(pBitmap2), Gdip_SetSmoothingMode(G2, 4), Gdip_SetInterpolationMode(G2, 7)
Gdip_DrawImage(G2, pBitmap, 0, 0, w, h,"","","","", "-1|0|0|0|0|0|-1|0|0|0|0|0|-1|0|0|0|0|0|1|0|1|1|1|0|1")
However I am still having trouble with replacing color. The ImageMagick commands convert.exe File.png -alpha off -fuzz 40% +fill white +opaque "#000000 OutPutFile.png and convert.exe File.png -alpha off -fuzz 30% -fill white -opaque "#C0C0C0" OutPutFile.png seem to do the job but I am trying to achieve the same thing via Gdip. The code below was posted by tic at https://autohotkey.com/board/topic/2944 ... ntry554258 but I can't get it to work. A sample image for testing can be found at https://ibb.co/jV5yZo. Any help is appreciated.
Code: Select all
#include %A_ScriptDir%
#Include Gdip_All.ahk
pToken := Gdip_Startup()
pBitmap := Gdip_CreateBitmapFromFile("input.png")
E := Gdip_FilterColor(pBitmap, 0xFFC0C0C0, 0xFFFFFFFF, 100)
Gdip_SaveBitmapToFile(E, "output.png")
Gdip_DisposeImage(pBitmap)
Gdip_Shutdown(pToken)
return
Gdip_FilterColor(pBitmap, Color, ReplaceColor, Variation=0)
{
static _FilterColor
if !_FilterColor
{
MCode_FilterColor := "83EC288B44243C8BC8C1E918894C243C8BC8C1E91081E1FF000000894C240C0FB6CC25FF000000894C2410894424148B442440"
. "8BC8C1E918894C24188BC80FB6D425FF000000C1E910894424248B44243481E1FF00000085C0894C241C895424200F8E020100008B54242C5355568B7"
. "4245033DB578B7C2440895C241489442418B90100000085FF0F8EC10000008D4A028D040B8BDA2BD983C303895C24508BDA2BD983C301895C24442BD1"
. "897C24108B5C24448B4C24500FB62C030FB60C018B5C244C0FB63803DE3BCB7F688B5C244C2BDE3BCB7C5E8B4C241C8D1C313BFB7F532BCE3BF97C4D8"
. "B4C24208D3C313BEF7F422BCE3BE97C3C8B7C24240FB60C028D1C373BCB7F2D2BFE3BCF7C270FB64C24288B7C2450880C070FB64C242C8B7C24448808"
. "0FB64C2430880C070FB64C2434880C02B90100000083C004294C24100F8569FFFFFF8B7C24408B54243C8B5C2414035C2448294C2418895C24140F852"
. "1FFFFFF5F5E5D5B33C083C428C3"
VarSetCapacity(_FilterColor, StrLen(MCode_FilterColor)//2)
Loop % StrLen(MCode_FilterColor)//2 ;%
NumPut("0x" SubStr(MCode_FilterColor, (2*A_Index)-1, 2), _FilterColor, A_Index-1, "char")
}
Variation := (Variation > 255) ? 255 : (Variation < 0) ? 0 : Variation
Gdip_GetImageDimensions(pBitmap, w, h)
E1 := Gdip_LockBits(pBitmap, 0, 0, w, h, Stride1, Scan01, BitmapData1)
E := DllCall(&_FilterColor, "uint", Scan01, "int", w, "int", h, "int", Stride1, "uint", Color, "uint", ReplaceColor, "int", Variation)
Gdip_UnlockBits(pBitmap, BitmapData1)
return (E = "") ? -1 : E
}