嗨,我正在用代码调整我的图像大小
http://vocaro.com/trevor/blog/2009/10/12/resize-a-uiimage-the-right-way/
- (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图像.输出是
image.png: PNG image data, 800 x 264, 8-bit colormap, non-interlaced控制台中的错误消息是colorspace不受支持的。
在googling之后,我意识到“位图图形上下文不支持索引颜色空间”。
遵循一些建议,而不是使用原始的颜色空间,我将它更改为
colorSpace = CGColorSpaceCreateDeviceRGB();现在我得到了一个新的错误:
CGBitmapContextCreate: unsupported parameter combination: 8 integer bits/component; 24 bits/pixel; 3-component color space; kCGImageAlphaNone; 2400 bytes/row.FYI,我的图像是800 px宽。
我怎样才能解决这个问题?非常感谢!
发布于 2013-10-10 08:00:13
我意识到支持的格式列表在这里:ref/doc/uid/TP30001066-CH203-BCIBHHBB
也没有24位/像素的。
因此,我在这里使用了可接受的解决方案:iPhone: Changing CGImageAlphaInfo of CGImage
https://stackoverflow.com/questions/19267828
复制相似问题