2012-10-04 55 views
1

读错的RGB值我读我的UIImage(inputImage的),这样的RGB值:当我调整的UIImage

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)]; 

发生这种情况,即使我调整到相同大小我有。数据发生了一些奇怪的现象,但结果是正确的,图像调整正确。 任何人都知道什么是问题?

+1

在第一个例子中,您直接阅读图像,在第二个例子中您正在使用上下文。我猜第一个是RGB,另一个是BGR。使用CGImageGetColorSpace(image.CGImage)来确认。 – BlueVoodoo

+0

不......我在使用调整大小函数之前和之后使用CGImageGetColorSpace(inputImage.CGImage),并返回相同的值:kCGColorSpaceDeviceRGB。但是CGImageGetAlphaInfo从5改变为2,CGImageGetBitmapInfo从5改变为8194(&),并且CGImageGetBytesPerRow从1068改变为1088(它总是添加20个字节,这与我使用的图像无关)。全部使用相同的图像,并使用该功能,但调整到相同的大小。 – Xithias

+0

好了,现在我正确使用了CGImageGetBitmapInfo ... kCGBitmapByteOrderMask从NO更改为YES,kCGBitmapByteOrder32Little从NO更改为YES,并且kCGBitmapByteOrder16Big从NO更改为YES。除kCGBitmapAlphaInfoMask(YES)外,其他常量不更改,其值为NO。 – Xithias

回答

0

它默认为RGB的BGR。 OpenCV进行相同的频道转换。