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