замена определенного цвета в изображении - PullRequest
4 голосов
/ 15 марта 2012

Предполагая, что я хотел бы изменить только определенный цвет (на пиксель) в данном UIImageView.Как бы я использовал следующий код, чтобы изменить все белые пиксели на 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];
}
...