ios - 从 UIImageView 获取主色的坐标

标签 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)}

由于数量大。迭代后,我无法找出坐标。它使用更多内存并挂起应用程序,还有其他方法可以解决吗?

最佳答案

我之前做过一个图像处理项目。我得到所有像素的阿尔法并将其缓存。 (我的图像只有 1200x1200px)

不知道为什么,但当我在 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)

并且运行速度更快

您可以尝试这个进行测试

(对不起,我没有足够的观点发表评论,如果没有帮助,请忽略它)

关于ios - 从 UIImageView 获取主色的坐标,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/48457136/

相关文章:

ios - 将 TableView 放在导航栏下

ios - 使用 UISlider 移动两个 UIImageView

受 IPV6 影响的 iOS 应用内购买非消耗品

ios - 当项目发生变化时,Xcode 如何编译文件?

ios - 如何删除核心图形中的圆圈

ios - 处理恢复购买时如何处理旧交易?

swift - 如何在 Swift 中显示当前运行的类和函数

ios - Playground Xcode swift : WKWebView_scripting[. .] 无法获取路径的沙箱扩展

iphone - 来自 NSData 的图像未正确加载

ios - 如何在 CollectionView 中显示照片库或相机中选定的图像?画廊 View