Масштабирование черно-белого изображения - PullRequest
1 голос
/ 31 октября 2011

Я получаю изображение из Интернета и показываю его в UIImage, но сначала я уменьшил его. Дело в том, что если изображение черно-белое, результат довольно плохой, с множеством белых линий, пересекающих изображение.

Я пробовал много вариантов, но не вижу улучшений, всегда один и тот же результат низкого качества. Любые советы?

Некоторые вещи, которые я пробовал (помните, что я работаю без UIImageView):

http://iosdevelopertips.com/graphics/how-to-scale-an-image-using-an-objective-c-category.html

Как пропорционально масштабировать UIImageView?

Какой самый простой способ изменить размер / оптимизировать размер изображения с помощью iPhone SDK?

http://www.iphonedevsdk.com/forum/iphone-sdk-development/5204-resize-image-high-quality.html

1 Ответ

2 голосов
/ 13 ноября 2011

Оказывается, @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, не знаю почему (ничего об этом нет в документации).

...