画像1の色の傾向を知る方法はないかしらんと調べていたときに、画像を1ピクセルサイズに縮小してその1ピクセルの色を読む、という方法を Stack Overflow2 で見つけてなんかすごくスマートに感じたので採用することにした。
厳密な値は求めてないしコードをたくさん書きたくないので、縮小は簡単に済ませることに。iOSのことは知りません。
Foo.m
+ (NSColor *)averageColor:(NSBitmapImageRep *)bitmapRep
{
// put image in 1 pixel rect
NSImage *pixel = [[NSImage alloc] initWithSize:NSMakeSize(1, 1)];
[pixel lockFocus];
[bitmapRep drawInRect:NSMakeRect(0, 0, 1, 1)];
[pixel unlockFocus];
NSBitmapImageRep *pixelRep = [[NSBitmapImageRep alloc] initWithData:[pixel TIFFRepresentation]];
// read averaged color
NSColor *color = [pixelRep colorAtX:0 y:0];
return color;
}
できた。
ちなみに今回は白っぽいか黒っぽいか知りたかっただけなので、さらにここから輝度を取り出した。
CGFloat brightness = [[Foo averageColor:imageRep] brightnessComponent];
--
1. というか今回はWebViewだったんだけど
2. memory management - How do I release a CGImageRef in iOS - Stack Overflow