Оказывается, @cbranch был прав, поэтому сначала вот решение, которое я нашел (без выпусков):
- (BOOL) isGrayscaleImage:(UIImage *)image
{
CGImageRef imgRef = [image CGImage];
CGColorSpaceModel clrMod = CGColorSpaceGetModel(CGImageGetColorSpace(imgRef));
switch (clrMod) {
case kCGColorSpaceModelMonochrome :
return YES;
default:
return NO;
}
}
- (UIImage *) imageToGrayscale:(UIImage *)image
{
CGSize size = image.size;
CGRect rect = CGRectMake(0.0f, 0.0f, size.width, size.height);
CGColorSpaceRef colorSpace = CGColorSpaceCreateDeviceGray();
CGContextRef context = CGBitmapContextCreate(nil, size.width, size.height, 8, 0, colorSpace, kCGImageAlphaNone);
CGColorSpaceRelease(colorSpace);
CGContextDrawImage(context, rect, [image CGImage]);
CGImageRef grayscale = CGBitmapContextCreateImage(context);
UIImage *img = [UIImage imageWithCGImage:grayscale];
return img;
}
Обратите внимание, что это не обязательно для iOS5, не знаю почему (ничего об этом нет в документации).