要从 CGImage 检索像素值,我使用 CGContextDrawImage (如下所述: 如何从 UIImage (Cocoa Touch) 或 CGImage (Core Graphics) 获取像素数据?)。唯一的区别是我创建了 128 bpp 浮动组件上下文,而不是通常的 32 bpp 上下文。从使用选项 kCGImageSourceShouldAllowFloat 创建的 CGImageSource 获得的源 CGImage。通过这种方式,我希望能够访问与我的位图上下文颜色空间匹配的浮点像素值,并将它们用于进一步的图像处理。问题是生成的图像数据似乎正在失去动态范围。它可以在阴影、纯蓝天区域看到。它们变得轮廓分明,缺乏细节。一些调查表明问题发生在 CGContextDrawImage (源 CGImage 包含完整的动态范围,通过 CGImageDestination 保存它证明了这一点)和 CGContextDrawImage 上下文内容变得分色后。
经过更多调查后,我发现了这一点:http: //lists.apple.com/archives/quartz-dev/2007/mar/msg00026.html 这使我得出结论,问题不在我的代码中,而在核心图形中,或者那是预期的行为。
我的问题是:使用核心图形从图像中获取浮点数据的正确方法是什么?