图像已调整大小错误:CGBitmapContextCreate:不支持的参数

时间:2010-02-10 07:52:54

标签: iphone objective-c

我使用以下代码(来自博客文章)来调整图片大小

if (inImage.size.width <= inImage.size.height) {
    // Portrait
    ratio = inImage.size.height / inImage.size.width;
    resizedRect = CGRectMake(0, 0, width, width * ratio);
}
else {
    // Landscape
    ratio = inImage.size.width / inImage.size.height;
    resizedRect = CGRectMake(0, 0, height * ratio, height);
}

CGImageRef          imageRef = [inImage CGImage];
CGImageAlphaInfo    alphaInfo = CGImageGetAlphaInfo(imageRef);

if (alphaInfo == kCGImageAlphaNone)
    alphaInfo = kCGImageAlphaNoneSkipLast;

CGContextRef bitmap = CGBitmapContextCreate(
                                            NULL,
                                            resizedRect.size.width,     // width
                                            resizedRect.size.height,        // height
                                            CGImageGetBitsPerComponent(imageRef),   // really needs to always be 8
                                            4 * resizedRect.size.width, // rowbytes
                                            CGImageGetColorSpace(imageRef),
                                            alphaInfo
                                            );

但由于某种原因,我会尝试调整大小,因此会产生以下错误

  

CGBitmapContextCreate:不支持   参数组合:8整数   位/分量; 32位/像素;   3分量色彩空间;   kCGImageAlphaNoneSkipFirst; XXX   字节/行。

其中XXX因图像而异。

我正在创建的矩形是图像的比例,我从宽度/高度(取决于方面)和多个目标宽度/高度的比率。

以下是一些示例(X错误,/ doesnt),调整大小将为50xX或Xx50,具体取决于方面:

Source   50x50   69x69
430x320  /      X
240x320  /      /
272x320  /      /
480x419  /      X
426x320  X      X
480x256  X      X

1 个答案:

答案 0 :(得分:12)

您撰写thumbRect的地方,您的意思是resizedRectthumbRect不会发生。

我怀疑问题是resizedRect.size.width不是整数。请注意,它是浮点数。

CGBitmapContextCreate的width和bytesPerRow参数声明为整数。传递浮点值(例如此处)时,它会被截断。

假设您的resizedRect.size.width为1.25。然后你将最终传递1作为宽度,并将floor(1.25 * 4)== 5作为每行的字节数。这是不一致的。对于每行的字节宽度,你总是希望传递四次。

顺便说一句,您也可以将bytesPerRow保留为0。然后系统选择最好的bytesPerRow(通常大于宽度的4倍 - 它填充对齐)。