为了从CGImage中检索像素值,我使用了CGContextDrawImage (就像这里描述的:How to get pixel data from a UIImage (Cocoa Touch) or 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,这让我得出结论,问题不是在我的代码中,而是在核心图形中,或者说这是预期的行为。
我的问题是:使用核心图形从图像中获取浮点数据的正确方法是什么?
发布于 2011-05-05 02:32:42
经过一些进一步的研究,问题被缩小到以下范围:当8位图像被绘制到使用线性颜色空间(kCGColorSpaceGenericRGBLinear)创建的128bpp浮点上下文时,发生色调。如果我将相同的图像绘制到使用kCGColorSpaceGenericRGB创建的上下文中,然后从该上下文中检索CGImage,并将第二个图像绘制到线性颜色空间上下文中,则一切正常。
其他解决方案(解决方法?)是使用核心图像:从源CGImage创建CIImage,并将其绘制到使用相应的kCGColorSpaceGenericRGBLinear CGContext创建的CIContext。但在OS X上(不是在iOS上),这是唯一的选择。
https://stackoverflow.com/questions/5880944
复制相似问题