2011-05-04 15 views
0

使用CGOmage的CGImage的像素值我使用CGContextDrawImage(像这里描述: How to get pixel data from a UIImage (Cocoa Touch) or CGImage (Core Graphics)?)。唯一的区别是我创建了128个bpp浮点组件上下文,而不是通常的32个bpp上下文。从CGImageSource获取的源CGImage使用选项kCGImageSourceShouldAllowFloat创建。这样我希望能够访问与我的位图上下文的颜色空间匹配的浮动像素值,并在进一步的图像处理中使用它们。问题是生成的图像数据似乎失去了动态范围。它可以在阴影,平原蓝天区域看到。它们变得异形并且缺乏细节。一些调查显示CGContextDrawImage中出现问题(源CGImage包含完整的动态范围,通过CGImageDestination保存它证明了这一点),并且在CGContextDrawImage上下文内容变得后化之后。当使用CGContextDrawImage,float CGBitmapContext

经过一番深入调查,我发现这一点: http://lists.apple.com/archives/quartz-dev/2007/mar/msg00026.html 这使我得出结论的问题是不是在我的代码,但在核心显卡或者说是预期的行为。

我的问题是:使用核心图形从图像中获取浮点数据的正确方法是什么?

回答

0

经过一些调查后,问题被缩小到以下内容:当8位图像被绘制到用线性色彩空间(kCGColorSpaceGenericRGBLinear)创建的128 bpp浮点上下文时,会出现分版。如果我将相同的图像绘制到使用kCGColorSpaceGenericRGB创建的上下文中,然后从该上下文中检索CGImage,并将第二个图像绘制到线性色彩空间上下文,则一切正常。

其他解决方案(解决方法?)是使用Core Image:从源CGImage创建CIImage,并将其绘制到使用相应的kCGColorSpaceGenericRGBLinear CGContext创建的CIContext。但在OS X上的唯一选择(不在iOS上)。