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)];
发生这种情况,即使我调整到相同大小我有。数据发生了一些奇怪的现象,但结果是正确的,图像调整正确。 任何人都知道什么是问题?
在第一个例子中,您直接阅读图像,在第二个例子中您正在使用上下文。我猜第一个是RGB,另一个是BGR。使用CGImageGetColorSpace(image.CGImage)来确认。 – BlueVoodoo
不......我在使用调整大小函数之前和之后使用CGImageGetColorSpace(inputImage.CGImage),并返回相同的值:kCGColorSpaceDeviceRGB。但是CGImageGetAlphaInfo从5改变为2,CGImageGetBitmapInfo从5改变为8194(&),并且CGImageGetBytesPerRow从1068改变为1088(它总是添加20个字节,这与我使用的图像无关)。全部使用相同的图像,并使用该功能,但调整到相同的大小。 – Xithias
好了,现在我正确使用了CGImageGetBitmapInfo ... kCGBitmapByteOrderMask从NO更改为YES,kCGBitmapByteOrder32Little从NO更改为YES,并且kCGBitmapByteOrder16Big从NO更改为YES。除kCGBitmapAlphaInfoMask(YES)外,其他常量不更改,其值为NO。 – Xithias