Recently, I encountered a problem that I need to change the color of non-transparent pixels in an image with a transparent background without affecting much the original quality (at least not draw with hard edges). Therefore I did some searches on Google and found the following solution (credit at the end). The following solution does not care about the luminosity of the image.
CGImageRef image; CGContextSetBlendMode(context, kCGBlendModeNormal); [tintColor setFill]; CGContextFillRect(context, rect); CGContextSetBlendMode(context, kCGBlendModeDestinationIn); CGContextDrawImage(context, rect, image);
or exchange the steps,
CGImageRef image; CGContextSetBlendMode(context, kCGBlendModeNormal); CGContextDrawImage(context, rect, image); CGContextSetBlendMode(context, kCGBlendModeSourceIn); [tintColor setFill]; CGContextFillRect(context, rect);
For more details or other solutions, please refer to the link in credit below.
Credit: http://stackoverflow.com/questions/3514066/how-to-tint-a-transparent-png-image-in-iphone