Replacing a specific color in uiimage

Assuming I want to change only a specific color (per pixel) in a given UIImageView. How to use the following code to change all white pixels in darkGray?

- (UIImage *) changeColorForImage:(UIImage *)image toColor:(UIColor*)color { UIGraphicsBeginImageContext(image.size); CGRect contextRect; contextRect.origin.x = 0.0f; contextRect.origin.y = 0.0f; contextRect.size = [image size]; // Retrieve source image and begin image context CGSize itemImageSize = [image size]; CGPoint itemImagePosition; itemImagePosition.x = ceilf((contextRect.size.width - itemImageSize.width) / 2); itemImagePosition.y = ceilf((contextRect.size.height - itemImageSize.height) ); UIGraphicsBeginImageContext(contextRect.size); CGContextRef c = UIGraphicsGetCurrentContext(); // Setup shadow // Setup transparency layer and clip to mask CGContextBeginTransparencyLayer(c, NULL); CGContextScaleCTM(c, 1.0, -1.0); CGContextClipToMask(c, CGRectMake(itemImagePosition.x, -itemImagePosition.y, itemImageSize.width, -itemImageSize.height), [image CGImage]); // Fill and end the transparency layer const float* colors = CGColorGetComponents( color.CGColor ); CGContextSetRGBFillColor(c, colors[0], colors[1], colors[2], .75); contextRect.size.height = -contextRect.size.height; contextRect.size.height -= 15; CGContextFillRect(c, contextRect); CGContextEndTransparencyLayer(c); UIImage *img = UIGraphicsGetImageFromCurrentImageContext(); UIGraphicsEndImageContext(); return img; } Now that I know this simple code, I can even create idiotic methods like: - (UIColor*) oppositeColor:(UIColor*)color { const float* colors = CGColorGetComponents(color.CGColor); return [UIColor colorWithRed:1-colors[0] green:1-colors[1] blue:1-colors[2] alpha:1]; } 
+4
source share

Source: https://habr.com/ru/post/1401584/


All Articles