首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >ARSCNView中像素的颜色

ARSCNView中像素的颜色
EN

Stack Overflow用户
提问于 2018-12-12 23:50:10
回答 1查看 181关注 0票数 0

我正在尝试获取由触摸位置确定的CGPoint中像素的颜色。我尝试了以下代码,但颜色值不正确。

代码语言:javascript
复制
override func touchesBegan(_ touches: Set<UITouch>, with event: UIEvent?) {
    if let touch = event?.allTouches?.first {
        let loc:CGPoint = touch.location(in: touch.view)
        // in debugger, the image is correct
        let image = sceneView.snapshot()
        guard let color = image[Int(loc.x), Int(loc.y)] else{
            return
        }
        print(color)

    }
}
....

extension UIImage {

subscript (x: Int, y: Int) -> [UInt8]? {
    if x < 0 || x > Int(size.width) || y < 0 || y > Int(size.height) {
        return nil
    }
    let provider = self.cgImage!.dataProvider
    let providerData = provider!.data
    let data = CFDataGetBytePtr(providerData)

    let numberOfComponents = 4
    let pixelData = ((Int(size.width) * y) + x) * numberOfComponents

    let r = data![pixelData]
    let g = data![pixelData + 1]
    let b = data![pixelData + 2]
    return [r, g, b]

}
}

运行它并触摸屏幕上的一个非常大的一致明亮的橙色斑点,会产生广泛的RGB值,并查看它们实际产生的颜色会产生完全不同的颜色(橙色的情况下是深蓝色)。

我猜可能是坐标系不同,实际上我在图像上得到的点可能是不同的?

编辑:我还应该提到的是,我正在点击的部分是一个3D模型,它不受光照的影响,因此颜色应该并看起来在运行时是一致的。

EN

回答 1

Stack Overflow用户

发布于 2018-12-13 00:48:41

嗯,这比我想象的要容易。我首先调整了一些东西,比如让触摸在我的场景中注册:

代码语言:javascript
复制
 let loc:CGPoint = touch.location(in: sceneView)

然后,我通过执行以下操作重新调整了cgpoint的比例,以适应图像视图:

代码语言:javascript
复制
let image = sceneView.snapshot()
let x = image.size.width / sceneView.frame.size.width
let y = image.size.height / sceneView.frame.size.height
guard let color = image[Int(x * loc.x), Int(y * loc.y)] else{
   return
}

这让我最终获得了一致的rgb值(而不仅仅是每次触摸时都会发生变化的数字,即使我使用的是相同的颜色)。但价值观仍然是错误的。由于某种原因,我返回的数组是反向的,所以我用以下命令更改了它:

代码语言:javascript
复制
let b = data![pixelData]
let g = data![pixelData + 1]
let r = data![pixelData + 2]

我不确定为什么我要做最后一部分,所以任何对此的见解都将不胜感激!

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/53746664

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档