Iphone 获取iOS中CGImageRef的平均RGB颜色

Iphone 获取iOS中CGImageRef的平均RGB颜色,iphone,ios,uiimage,core-graphics,rgb,Iphone,Ios,Uiimage,Core Graphics,Rgb,我已经为此挣扎了几个小时,我希望其他人有一些见解。我正在寻找一种方法来获得1x1图像的平均RGB颜色。到目前为止,我已经从UIImage创建了一个CGImageRef,但我对CoreGraphics还很陌生,所以我不确定从那里开始。感谢您的帮助。谢谢 如果您有一个CGImage,您可以通过调用 CGDataProviderRef CGImageGetDataProvider ( CGImageRef image ); 然后你可以复制数据 CFDataRef CGDataProvider

我已经为此挣扎了几个小时,我希望其他人有一些见解。我正在寻找一种方法来获得1x1图像的平均RGB颜色。到目前为止,我已经从UIImage创建了一个CGImageRef,但我对CoreGraphics还很陌生,所以我不确定从那里开始。感谢您的帮助。谢谢

如果您有一个CGImage,您可以通过调用

CGDataProviderRef CGImageGetDataProvider (
   CGImageRef image
);

然后你可以复制数据

CFDataRef CGDataProviderCopyData(
   CGDataProviderRef provider
);

由于
CFData
NSData
相同,因此可以强制转换它并检索字节

- (const void *)bytes

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

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

要获取信息,图像数据是如何以字节形式存储的。

如果您有CGImage,则可以通过调用

CGDataProviderRef CGImageGetDataProvider (
   CGImageRef image
);

然后你可以复制数据

CFDataRef CGDataProviderCopyData(
   CGDataProviderRef provider
);

由于
CFData
NSData
相同,因此可以强制转换它并检索字节

- (const void *)bytes

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

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

要获取信息,图像数据是如何以字节形式存储的。

如何定义平均值?平均亮度?平均色调?平均色度?每个通道的简单平均值(R、G和B)?每个通道的平均值。如何定义平均值?平均亮度?平均色调?平均色度?每个通道的简单平均值(R、G和B)?每个通道的平均值。支持CGImage的每种可能的颜色格式(请记住,在任何两个操作系统版本或硬件版本上可能不相同)是一项不可行且不可取的工作量。最好只将图像绘制到以您选择的格式创建的位图上下文中,然后编写代码以仅以一种格式检查像素。@PeterHosey,在进行此操作时,您可以使用图像绘制同时计算平均值,如答案所示。支持CGImage的所有可能的颜色格式(请记住,在任何两个操作系统版本或硬件版本上可能不相同)是一项不可行且不受欢迎的工作量。最好只将图像绘制到您选择的格式创建的位图上下文中,然后编写代码,仅以一种格式检查像素。@PeterHosey,同时,您可以使用图像绘制计算平均值,如回答中所示。