目的
UIView上の任意の位置(ローカルx,y座標)のピクセルの色を知りたい。
実装
下記のように画素配列を取り出してアクセスする。画素成分の並び順に注意。常に R, G, B, A という順序で並んでいるわけではない。(詳しくはコメント欄参照)
// view 上の位置 (x,y)の画素にアクセス
UIGraphicsBeginImageContext(view.frame.size)
view.layer.renderInContext(UIGraphicsGetCurrentContext()!)
let imgCtx = UIGraphicsGetImageFromCurrentImageContext()
UIGraphicsEndImageContext()
let pixelData = CGDataProviderCopyData(CGImageGetDataProvider(imgCtx!.CGImage))
// 画素バッファを得る
let pixelBuf = CFDataGetBytePtr(pixelData)
// 画素アドレス(バッファ内インデクス)を求める
let pixelAddr = ((view.frame.size.width * y) + x) * 4 // 1 Pixel==4 Byte
// 画素成分が、Green, Blue, Red, Alpha の順に並んでいる場合
let green = CGFloat(pixelBuf[ pixelAddr ])/255.0
let blue = CGFloat(pixelBuf[ pixelAddr+1 ])/255.0
let red = CGFloat(pixelBuf[ pixelAddr+2 ])/255.0
let alpha = CGFloat(pixelBuf[ pixelAddr+3 ])/255.0
// UIColor オブジェクト作成
let color = UIColor(red:red, green:green, blue:blue, alpha:alpha)