iphone - 混合颜色空间有惩罚吗? (核心显卡)

标签 iphone macos core-graphics cgcolorspace

如果我在 Mac OS X 或 iPhone OS 上的 Core Graphics 中编写绘图代码,我可以通过调用以下命令将事件填充颜色设置为红色:

CGContextSetRGBFillColor(context, 1.0, 0.0, 0.0, 1.0); // RGB(1,0,0)

如果我想要 50% 的灰度,我可以调用:

CGContextSetRGBFillColor(context, 0.5, 0.5, 0.5, 1.0); // RGB(0.5,0.5,0.5)

但是对于灰色阴影,很容易制作较短的线路并调用:

CGContextSetGrayFillColor(context, 0.5, 1.0);

但是,这个函数并不是简单地调用 RGB 方法并将强度值复制 3 次;相反,它将上下文的颜色空间从 DeviceRGB 更改为 DeviceGray。下次调用 RGB 方法会将其切换回来。

我很想知道:

  • 切换色彩空间会带来什么损失?
  • 当上下文的色彩空间与设备的原生色彩空间不匹配时,绘图是否会受到影响? (即,使用 DeviceGray 与 DeviceRGB 进行绘制)

我问这个问题是出于技术上的好奇心,而不是过早优化的愿望,所以请尽量减少你的警告。

最佳答案

从概念上讲,这是有惩罚的,但实际上它很小,以至于无关紧要;即使使用自定义颜色空间,将(例如)灰色阴影转换为 RGB 三元组(加上 alpha)也是微不足道的算术。

但是,当您绘制图像时,颜色空间确实会受到影响,因为它不仅仅是单个转换操作的问题。每个像素都必须进行转换,虽然可以在此处进行优化(例如 CLUT、颜色查找表,如果源图像使用索引颜色,则非常有用),但它们在您还发现的情况下往往没有用处。 quartz 代码。

你说你期待CGContextSetGrayFillColor()更改图形上下文的颜色空间,但实际情况并非如此。这样做需要转换该图形上下文的内容以匹配上下文的新颜色空间。由于转换颜色而不是上下文的缓冲区要便宜得多且简单得多(例如,通过将 CGContextSetGrayFillColor() 制作为 CGContextSetRGBFillColor() 的幕后包装器),因此在任何明智的实现中都将避免这种费用。 p>

关于iphone - 混合颜色空间有惩罚吗? (核心显卡),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/2143645/

相关文章:

iphone - 定时选择器从未执行过

iphone - ExecuteFetchRequest 间歇性地抛出具有相同参数的异常。 "not key value coding-compliant for the key"

php - 在 Mac OS X Yosemite 10.10 上使用 Mamp Pro 的 Mcrypt

objective-c - 带有 2 个 nstextfields 的 controlTextDidChange - 调用不同的选择器

objective-c - 完成启动后应用程序不会发布 NSWorkspaceDidLaunchApplicationNotification

iphone - 保存和恢复CGContext

iphone - 如何更改 UIPickerView 中选定行的颜色

ios - 如何使用手势识别器在大图像上画线而不会出现内存问题

ios - 在文本矩阵中使用多个 CGAffineTransform

iphone - AVAudioPlayer 的问题