一直在研究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,而绿色和蓝色的行为符合预期。我究竟做错了什么?

最佳答案

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

除非您是根据原始数据自己创建图像的,否则可能无法确定。您可以使用CGImageGetBitmapInfo(),CGImageGetAlphaInfo(),CGImageGetColorSpace()之类的函数进行查找。

10-08 11:42