2011-10-01 120 views
1

我一直在爲此奮鬥了幾個小時,我希望別人有一些洞察力。我正在尋找一種方法來獲得1x1 UIImage的平均RGB顏色。到目前爲止,我已經從UIImage創建了一個CGImageRef,但是我對CoreGraphics真的很陌生,所以我不確定從哪裏開始。任何幫助表示讚賞。謝謝!在iOS中獲取CGImageRef的平均RGB顏色

+1

你如何定義平均值?平均亮度?平均色調?平均色度?每個通道(R,G和B)的簡單平均值? –

+0

每個通道的平均值。 – Mason

回答

1

如果你有一個CGImage,您可以通過調用

CGDataProviderRef CGImageGetDataProvider (
    CGImageRef image 
); 

CGImage doc

獲取數據那麼您可以複製數據

CFDataRef CGDataProviderCopyData(
    CGDataProviderRef provider 
); 

CGDataProvider doc

由於CFData是與NSData相同,您可以ca ST和檢索字節

- (const void *)bytes 

CFData doc

NSData doc

現在你有原始字節,你可以用他們什麼,使用

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

獲取信息是如何圖像數據存儲在你得到的字節中。

+0

太棒了,謝謝! – Mason

+0

支持CGImage的每一種可能的顏色格式(記住它在任何兩個操作系統版本或硬件修訂版本上可能都不一樣)是不可行和不合適的工作量。更好的方法是將圖像繪製到以您選擇的格式創建的位圖上下文中,然後編寫代碼以僅以一種格式檢查像素。 –

+0

@PeterHosey當你在它的時候,你可以使用圖像繪製來同時計算平均值,如[this]中所示(http://stackoverflow.com/questions/12147779/how-do-i -release-a-cgimageref-in-ios/12148136#12148136)回答。 –