I’m looking to manage the color of a PNG file by code. I have a folder black PNG file and I want to change it’s color by code red, blue, etc…
If it’s a black line PNG with a transparent background this should do it:
- Draw png into same size picture with white background
- Draw picture with the colour you want the line to be
- Apply the first png to the second png with ApplyMask
The second picture should now be your lineicon in the desired colour.
Sorry @Tim_Parnell I don’t really understand your solution.
My image is like this
Can you wrote some code to change the black color to blue, red, etc. ?
Here’s a sample project to help you get started.
Note that this will only work with black source icons.
You can use rgbsurface.transform to do the job too.
It allows for a bit of flex
dim rmap(255) as integer
dim bmap(255) as integer
dim gmap(255) as integer
for y as integer = 0 to 255
rmap(y) = y
gmap(y) = y
bmap(y) = y
next
dim newcolor as color = &cff1010
rmap(0) = newcolor.red
bmap(0) = newcolor.blue
gmap(0) = newcolor.green
//if you have greys at the edges, you might extend this to
'rmap(1) = newcolor.red
' bmap(1) = newcolor.blue
' gmap(1) = newcolor.green
'rmap(2) = newcolor.red
' bmap(2) = newcolor.blue
'gmap(3) = newcolor.green
//swap black for red
copyofblackimage.rgbsurface.transform rmap(),gmap(),bmap()
And don’t forget the simple but slow way:
dim rgb as rgbsurface
dim newcolor as color = &cFF0000
rgb = theimage.rgbsurface
for y as integer = 0 to theimage.height
for x as integer = 0 to theimage.width
if rgb.pixel(x,y).value < 0.1 then rgb.pixel(x,y) = newcolor
next
next
I usually do it with picture.systemImage.
var p as picture = picture.systemImage("", dblSize, picture.systemImageWeights.regular, color.RGB(255, 0, 0), yourPicture)
- dblSize is the size of the picture, try 20 or 100 to see if there is a difference in the result
- color.RGB(255, 0, 0) is the color you want to have as the result
- yourPicture is your Picture you want to change
It seems to be an iOS solution only
Thank you everybody for your help ^^
Here is my final solution
Var iconMask As Picture = ImgFolder
Var coloredIcon As New Picture(iconMask.Width, iconMask.Height)
// Your desired line color
coloredIcon.Graphics.DrawingColor = &cff5555
coloredIcon.Graphics.FillRectangle(0, 0, iconMask.Width, iconMask.Height)
// Apply the mask
coloredIcon.ApplyMask(iconMask)
// Draw Picture
g.DrawPicture(coloredIcon, 0, (g.Height - 16) \ 2, 16, 16, 0, 0, coloredIcon.Width, coloredIcon.Height)
As you can see I store my image in the my project and name it ImgFolder.
I thing you can close this topic