【问题标题】:Reading wrong RGB values when I resize UIImage调整 UIImage 大小时读取错误的 RGB 值
【发布时间】:2012-10-04 15:42:49
【问题描述】:

我正在读取我的 UIImage (inputImage) 的 RGB 值,这样:

CGImageRef imageRef = inputImage.CGImage;
NSData *data = CFBridgingRelease(CGDataProviderCopyData(CGImageGetDataProvider(imageRef)));
unsigned char *pixels = (unsigned char *)[data bytes];

for(int i = 0; i < [data length]; i += 4) {
    int r = i;
    int g = i+1;
    int b = i+2;

    int rValue = (int)pixels[r];
    int gValue = (int)pixels[g];
    int bValue = (int)pixels[b];
}

完美运行。但是如果我在那段代码之前使用一个函数来调整图像大小,那么值就会出错。例如,他们说一个像素是 255 蓝色,而它是 255 红色。我觉得是在我使用函数的时候,红蓝RGB通道发生了变化(我知道,没有意义)。

这是我用来调整图像大小的函数:

- (UIImage *)imageWithImage:(UIImage *)image scaledToSize:(CGSize)newSize {
//UIGraphicsBeginImageContext(newSize);
UIGraphicsBeginImageContextWithOptions(newSize, NO, 0.0);
[image drawInRect:CGRectMake(0, 0, newSize.width, newSize.height)];
UIImage *newImage2 = UIGraphicsGetImageFromCurrentImageContext();
UIGraphicsEndImageContext();
return newImage2;
}

这就是我所说的:

inputImage = [self imageWithImage:inputImage scaledToSize:CGSizeMake(inputImage.size.width, inputImage.size.height)];

即使我将大小调整到与我相同的大小,也会发生这种情况。数据发生了一些奇怪的事情,但结果是正确的,图像的大小调整正确。 有谁知道是什么问题?

【问题讨论】:

  • 第一个实例是直接读取图像,第二个实例是使用上下文。我猜第一个是RGB,另一个是BGR。使用 CGImageGetColorSpace(image.CGImage) 确认。
  • 否...我在使用调整大小功能之前和之后使用 CGImageGetColorSpace(inputImage.CGImage),并返回相同的值:kCGColorSpaceDeviceRGB。但是 CGImageGetAlphaInfo 从 5 变为 2,CGImageGetBitmapInfo 从 5 变为 8194(¿?),而 CGImageGetBytesPerRow 从 1068 变为 1088(它总是增加 20 个字节,我使用什么图像并不重要)。都具有相同的图像,并使用该功能,但调整为相同的大小。
  • 好的,现在我正确使用了CGImageGetBitmapInfo... kCGBitmapByteOrderMask 由NO 变为YES,kCGBitmapByteOrder32Little 由NO 变为YES,kCGBitmapByteOrder16Big 由NO 变为YES。其他常量不变,其值为 NO,除了 kCGBitmapAlphaInfoMask (YES)。

标签: iphone objective-c ios resize uiimage


【解决方案1】:

从 RGB 默认为 BGR。 OpenCV 对通道进行相同的转置。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2020-10-08
    • 1970-01-01
    • 2012-02-04
    • 1970-01-01
    • 2015-11-20
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多