• 设为首页
  • 点击收藏
  • 手机版
    手机扫一扫访问
    迪恩网络手机版
  • 关注官方公众号
    微信扫一扫关注
    迪恩网络公众号

ios - 在 SKScene、iOS、Swift 中获取/设置像素颜色

[复制链接]
菜鸟教程小白 发表于 2022-12-11 16:46:42 | 显示全部楼层 |阅读模式 打印 上一主题 下一主题

我正在尝试编写一个处理像素的 iOS 游戏。我发现我可以使用提到的方法获得像素颜色 here ,还有其他方法可以获取图像中像素的颜色。但我找不到任何关于在 SKScene 中获取像素颜色的信息。 As no answer for this question

我认为它与在 UIView 中使用的方法非常相似,但我不熟悉 Swift 中的像素编码。这是我在 UIView 中用于获取像素颜色的方法:

  func getPixelColorAtPoint(point:CGPoint) -> UIColor{

    let pixel = UnsafeMutablePointer<CUnsignedChar>.alloc(4)
    let colorSpace = CGColorSpaceCreateDeviceRGB()
    let bitmapInfo = CGBitmapInfo(rawValue: CGImageAlphaInfo.PremultipliedLast.rawValue)
    let context = CGBitmapContextCreate(pixel, 1, 1, 8, 4, colorSpace, bitmapInfo.rawValue)

    CGContextTranslateCTM(context, -point.x, -point.y)
    self.layer.renderInContext(context!)
    let color:UIColor = UIColor(red: CGFloat(pixel[0])/255.0, green: CGFloat(pixel[1])/255.0, blue: CGFloat(pixel[2])/255.0, alpha: CGFloat(pixel[3])/255.0)

    pixel.dealloc(4)
    return color
  }

我想我需要更改'''self.layer....'''这一行。谁能帮我解决这个问题?

另外,我找不到任何有关如何直接在 UIView 或 SKScene 中设置像素颜色的信息。有什么想法吗?

顺便说一句:我尝试创建一个大小 = 1 像素的 UIView/SKNode 类,然后将其添加到 UIView/SKScene 以便我可以直接设置颜色。这对于少量像素是可行的。但我正在处理很多,可能有数百或数千个。这不是正确的方法,因为性能很差。



Best Answer-推荐答案


最近我尝试使用此扩展程序从 SKTexture 获取像素,这对我有用:

extension SKTexture {
    func getPixelColorFromTexture(position: CGPoint) -> SKColor {
        let view = SKView(frame: CGRectMake(0, 0, 1, 1))
        let scene = SKScene(size: CGSize(width: 1, height: 1))
        let sprite  = SKSpriteNode(texture: self)
        sprite.anchorPoint = CGPointZero
        sprite.position = CGPoint(x: -floor(position.x), y: -floor(position.y))
        scene.anchorPoint = CGPointZero
        scene.addChild(sprite)
        view.presentScene(scene)
        var pixel: [UInt8] = [0, 0, 0, 0]
        let bitmapInfo = CGBitmapInfo(rawValue: CGImageAlphaInfo.PremultipliedLast.rawValue).rawValue
        let context = CGBitmapContextCreate(&pixel, 1, 1, 8, 4, CGColorSpaceCreateDeviceRGB(), bitmapInfo)
        UIGraphicsPushContext(context!)
        view.drawViewHierarchyInRect(view.bounds, afterScreenUpdates: true)
        UIGraphicsPopContext()
        return SKColor(red: CGFloat(pixel[0]) / 255.0, green: CGFloat(pixel[1]) / 255.0, blue: CGFloat(pixel[2]) / 255.0, alpha: CGFloat(pixel[3]) / 255.0)
    }
}

关于ios - 在 SKScene、iOS、Swift 中获取/设置像素颜色,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/37936036/

回复

使用道具 举报

懒得打字嘛,点击右侧快捷回复 【右侧内容,后台自定义】
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

关注0

粉丝2

帖子830918

发布主题
阅读排行 更多
广告位

扫描微信二维码

查看手机版网站

随时了解更新最新资讯

139-2527-9053

在线客服(服务时间 9:00~18:00)

在线QQ客服
地址:深圳市南山区西丽大学城创智工业园
电邮:jeky_zhao#qq.com
移动电话:139-2527-9053

Powered by 互联科技 X3.4© 2001-2213 极客世界.|Sitemap