首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >UIImage用png-8创建位图上下文

UIImage用png-8创建位图上下文
EN

Stack Overflow用户
提问于 2013-10-09 09:19:42
回答 1查看 1.8K关注 0票数 0

嗨,我正在用代码调整我的图像大小

http://vocaro.com/trevor/blog/2009/10/12/resize-a-uiimage-the-right-way/

代码语言:javascript
复制
- (UIImage *)resizedImage:(CGSize)newSize
                transform:(CGAffineTransform)transform
           drawTransposed:(BOOL)transpose
     interpolationQuality:(CGInterpolationQuality)quality {
    CGRect newRect = CGRectIntegral(CGRectMake(0, 0, newSize.width, newSize.height));
    CGRect transposedRect = CGRectMake(0, 0, newRect.size.height, newRect.size.width);
    CGImageRef imageRef = self.CGImage;

    CGBitmapInfo bitMapInfo = CGImageGetBitmapInfo(imageRef);

    // Build a context that's the same dimensions as the new size
    CGContextRef bitmap = CGBitmapContextCreate(NULL,
                                                newRect.size.width,
                                                newRect.size.height,
                                                CGImageGetBitsPerComponent(imageRef),
                                                0,
                                                CGImageGetColorSpace(imageRef),
                                                bitMapInfo);

    // Rotate and/or flip the image if required by its orientation
    CGContextConcatCTM(bitmap, transform);

    // Set the quality level to use when rescaling
    CGContextSetInterpolationQuality(bitmap, quality);

    // Draw into the context; this scales the image
    CGContextDrawImage(bitmap, transpose ? transposedRect : newRect, imageRef);

    // Get the resized image from the context and a UIImage
    CGImageRef newImageRef = CGBitmapContextCreateImage(bitmap);
    UIImage *newImage = [UIImage imageWithCGImage:newImageRef];

    // Clean up
    CGContextRelease(bitmap);
    CGImageRelease(newImageRef);

    return newImage;
}

它正在正常图像的预期工作。然而,当我尝试给它一个png-8图像时,它失败了.通过在命令行中键入文件image.png,我知道这是一个png-8图像.输出是

代码语言:javascript
复制
image.png: PNG image data, 800 x 264, 8-bit colormap, non-interlaced

控制台中的错误消息是colorspace不受支持的。

在googling之后,我意识到“位图图形上下文不支持索引颜色空间”。

遵循一些建议,而不是使用原始的颜色空间,我将它更改为

代码语言:javascript
复制
colorSpace = CGColorSpaceCreateDeviceRGB();

现在我得到了一个新的错误:

代码语言:javascript
复制
CGBitmapContextCreate: unsupported parameter combination: 8 integer bits/component; 24 bits/pixel; 3-component color space; kCGImageAlphaNone; 2400 bytes/row.

FYI,我的图像是800 px宽。

我怎样才能解决这个问题?非常感谢!

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2013-10-10 08:00:13

我意识到支持的格式列表在这里:ref/doc/uid/TP30001066-CH203-BCIBHHBB

也没有24位/像素的。

因此,我在这里使用了可接受的解决方案:iPhone: Changing CGImageAlphaInfo of CGImage

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/19267828

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档