【问题标题】:Getting the average RGB color of a CGImageRef in iOS在 iOS 中获取 CGImageRef 的平均 RGB 颜色
【发布时间】:2011-10-01 22:50:13
【问题描述】:

我已经为此苦苦挣扎了几个小时,我希望其他人对此有所了解。我正在寻找一种方法来获得 1x1 UIImage 的平均 RGB 颜色。到目前为止,我已经从 UIImage 创建了一个 CGImageRef,但我对 CoreGraphics 真的很陌生,所以我不确定从那里去哪里。任何帮助表示赞赏。谢谢!

【问题讨论】:

  • 你如何定义平均值?平均亮度?平均色调?平均色度?每个通道(R、G 和 B)的简单平均值?
  • 每个频道的平均值。

标签: iphone ios uiimage core-graphics rgb


【解决方案1】:

如果你有一个CGImage,你通过调用来获取数据

CGDataProviderRef CGImageGetDataProvider (
   CGImageRef image
);

CGImage doc

然后就可以复制数据了

CFDataRef CGDataProviderCopyData(
   CGDataProviderRef provider
);

CGDataProvider doc

由于CFDataNSData 相同,您可以对其进行转换并检索字节

- (const void *)bytes

CFData doc

NSData doc

现在你有了原始字节,你可以用它们做任何事情,使用

CGImageAlphaInfo CGImageGetAlphaInfo (
   CGImageRef image
);
CGBitmapInfo CGImageGetBitmapInfo (
   CGImageRef image
);

获取信息,图像数据是如何存储在您获得的字节中的。

【讨论】:

  • 支持 CGImage 的每一种可能的颜色格式(请记住,在任何两个操作系统版本或硬件版本上它可能都不相同)是一项不可行且不受欢迎的工作。最好将图像绘制到您以您选择的格式创建的位图上下文中,然后编写代码以仅以一种格式检查像素。
  • @PeterHosey 当你在做的时候,你可以同时使用图像绘图来计算平均值,如this答案所示。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2011-07-09
  • 2019-08-26
  • 1970-01-01
  • 1970-01-01
  • 2016-08-10
  • 2015-04-12
相关资源
最近更新 更多