I am not entirely sure what you mean.
But what if you create a new picture object with the same dimensions as the image. Let's call it p
Fill the graphics of that picture object with the color (or gradient) you want. Use the alpha channel of your image, and assign that to the mask property of your picture.
The image will have the color you want, with the correct shape, given the shape of the mask.
Canvas1.Graphics.DrawPicture p, 0, 0
You can stack several (transparent) picture objects on your canvas, by using the DrawPicture over and over again.
I use this technique to create custom buttons, with button images that match the theme a user can select. They simply select a base color I store in a property.
I added a brightness function that can change the brightness of a color. For instance, the background color has 0.5x the value of the base color. The text or icon has 1.5x the value of a color.
Public Function Brightness(c as Color, value as Double = 1) as color
if value = 1 then Return c
dim NewColor as color = color.HSVA( c.Hue, c.Saturation, c.Value * value, c.Alpha )