从iPhone上的UIImage获取像素数据,为什么红色的数据总是255?

时间:2011-05-05 08:54:13

标签: iphone objective-c cocoa-touch uiimage

一直在研究this topic,并使用这种方法带来不同的运气:

-(RGBPixel*)bitmap{

    CGImageRef cgImage = [image CGImage];

    CGDataProviderRef provider = CGImageGetDataProvider(cgImage);

    bitmapData = CGDataProviderCopyData(provider);  

   [self setPixelByteData: malloc( CFDataGetLength(bitmapData) )];

    CFDataGetBytes( bitmapData, CFRangeMake( 0, CFDataGetLength( bitmapData ) ), pixelByteData );

    pixelData   = (RGBPixel*) pixelByteData;

    colorLabel.text = [[NSString alloc]initWithFormat:@"Pixel data: red (%i), green (%i), blue (%i).", pixelData[100].red, pixelData[100].green, pixelData[100].blue] ;

    return pixelData;
}

唯一不起作用的是红色像素数据:它总是说255,而绿色和蓝色表现得如预期的那样。我做错了什么?

1 个答案:

答案 0 :(得分:2)

正如@Nick暗示的那样,你确定你知道图像的格式吗? bitsPerComponent,bitsPerPixel,bytesPerRow,ColorSpace?数据可以是int或float格式。它可以安排RGB,RGBA或ARGB。

除非您自己从原始数据创建图像,否则您可能无法确定。您可以使用 CGImageGetBitmapInfo() CGImageGetAlphaInfo() CGImageGetColorSpace()等函数来查找。