从UIImageView获取主色的坐标

时间:2018-01-26 07:19:10

标签: ios swift uiimageview uiimage pixel

我无法找到拥有主色的UIImageView的坐标。这是代码:

for yCo in 0 ..< Int(imageView.frame.height) {
    for xCo in 0 ..< Int(imageView.frame.width) where image.getPixelColor(pos: CGPoint(x: xCo, y: yCo)) == dominantColorFirst {
        print(CGPoint(x: xCo, y: yCo)) // uses 99% CPU -> Leads to hang app
    }
}
extension UIImage {

func getPixelColor(pos: CGPoint) -> UIColor { // get pixel color

let pixelData = self.cgImage!.dataProvider!.data
let data: UnsafePointer<UInt8> = CFDataGetBytePtr(pixelData)

let pixelInfo: Int = ((Int(self.size.width) * Int(pos.y)) + Int(pos.x)) * 4

let r = CGFloat(data[pixelInfo]) / CGFloat(255.0)
let g = CGFloat(data[pixelInfo+1]) / CGFloat(255.0)
let b = CGFloat(data[pixelInfo+2]) / CGFloat(255.0)
let a = CGFloat(data[pixelInfo+3]) / CGFloat(255.0)

return UIColor(red: r, green: g, blue: b, alpha: a)}

由于大号没有。迭代,我无法找到坐标。它使用更多内存并挂起应用程序,有没有其他方法可以解决?

1 个答案:

答案 0 :(得分:0)

之前我做了一个图像处理项目。我得到所有像素的alpha并缓存它。 (我的图片只有1200x1200像素)

不知道为什么,但是当我在for循环中使用print时,它需要太多内存并延迟应用。

我必须带着

走来走去
var cachePointArray = [CGPoint]()
for yCo in 0 ..< Int(imageView.frame.height) {
    for xCo in 0 ..< Int(imageView.frame.width) {
        let point = CGPoint(x: xCo, y: yCo)
        if image.getPixelColor(pos: point) == dominantColorFirst {
            cachePointArray.append(point)
        }
    }
}
print(cachePointArray)

并且跑得快得多

您可以尝试进行测试

(抱歉,我没有足够的评论,如果没有帮助,请忽略它)