缩放黑白图像

Posted

技术标签:

【中文标题】缩放黑白图像【英文标题】:Scaling black and white image 【发布时间】:2011-10-30 21:08:26 【问题描述】:

我从网上获取一张图片并将其显示在 UIImage 中,但首先我将其缩小。问题是,如果图像是黑白的,结果会很糟糕,有很多白线穿过图片。

我尝试了很多变化,但我没有看到任何改进,总是同样的质量差。有什么建议吗?

我尝试过的一些事情(记住我在没有 UIImageView 的情况下工作):

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

How to scale a UIImageView proportionally?

What's the easiest way to resize/optimize an image size with the iPhone SDK?

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

【问题讨论】:

你尝试过哪些变体? 假设您的图像是每像素 1 位,您能否在缩放之前转换为灰度(8 BPP 或更好)? @cbranch 可能是这样,因为我没有。但是我如何识别它是否首先进行转换? 如果您的解决方案有效,请将其作为答案发布并接受。 【参考方案1】:

原来@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 来说不是必需的,不知道为什么(文档中对此没有任何说明)。

【讨论】:

以上是关于缩放黑白图像的主要内容,如果未能解决你的问题,请参考以下文章

使用 PIL 将 RGB 图像变成纯黑白图像

如何通过覆盖现有图像将一堆图像转换为黑白图像?

MATLAB读取黑白图像显示却是黑色,24位深转8位深黑白图像解决方法

CSS:如何将彩色图像转换为灰色或黑白图像[重复]

计算 2 个二值图像的相似度

如何把MATLAB中灰度图像转化为黑白图像