14
May
10

Tip: Grayscale UIImage

Here’s a handy routine to easily convert an UIImage to grayscale, like this:

grayscale.png

- (UIImage *)convertImageToGrayScale:(UIImage *)image

{

  // Create image rectangle with current image width/height

  CGRect imageRect = CGRectMake(0, 0, image.size.width, image.size.height);

  // Grayscale color space

  CGColorSpaceRef colorSpace = CGColorSpaceCreateDeviceGray();

  // Create bitmap content with current image size and grayscale colorspace

  CGContextRef context = CGBitmapContextCreate(nil, image.size.width, image.size.height, 8, 0, colorSpace, kCGImageAlphaNone);

  // Draw image into current context, with specified rectangle

  // using previously defined context (with grayscale colorspace)

  CGContextDrawImage(context, imageRect, [image CGImage]);

  // Create bitmap image info from pixel data in current context

  CGImageRef imageRef = CGBitmapContextCreateImage(context);

  // Create a new UIImage object

  UIImage *newImage = [UIImage imageWithCGImage:imageRef];

  // Release colorspace, context and bitmap information

  CGColorSpaceRelease(colorSpace);

  CGContextRelease(context);

  CFRelease(imageRef);

  // Return the new grayscale image

  return newImage;

}

That would be a stylish effect for a “please wait” pause or the like, we figure.


Leave a Reply