【问题标题】: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 可能是这样,因为我没有。但是我如何识别它是否首先进行转换?
  • 如果您的解决方案有效,请将其作为答案发布并接受。

标签: objective-c ios core-graphics


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

【讨论】:

    猜你喜欢
    • 2020-06-30
    • 1970-01-01
    • 1970-01-01
    • 2015-03-14
    • 2019-03-15
    • 1970-01-01
    • 1970-01-01
    • 2011-02-21
    • 2020-02-01
    相关资源
    最近更新 更多