如何从 SKSpriteNode 获取 UIImage
Posted
技术标签:
【中文标题】如何从 SKSpriteNode 获取 UIImage【英文标题】:how to get UIImage from SKSpriteNode 【发布时间】:2019-03-03 16:08:18 【问题描述】:我在从 SKSpriteNode 获取 UIImage 对象时遇到问题,即我可以获取它,但是在更改 SKSpriteNode 的 blendMode、colorBlendFactor 和颜色等属性后,纹理属性保持不变。 这是一个例子:
let sprite = SKSpriteNode(imageNamed: "fishka")
sprite.blendMode = .alpha
sprite.colorBlendFactor = 1
sprite.color = UIColor.red
let fishka = UIImage(cgImage: (sprite.texture?.cgImage())!)
这就是我得到的:
result after converting to UIImage (fishka) 和 image in SKSpriteNode object (sprite)
请问,我怎样才能像在 SKSpriteNode 中那样获得带有图片的 UIImage 对象?
谢谢
更新
这是另一个使用 CGContext 来获得所需结果的代码
let img = UIImage(named: "fishka")!
let rect = CGRect(x: 0, y: 0, width: img.size.width, height: img.size.height)
UIGraphicsBeginImageContext(rect.size)
let ctx = UIGraphicsGetCurrentContext()
img.draw(in: rect)
ctx?.setFillColor(UIColor.red.cgColor)
ctx?.setAlpha(1)
ctx?.setBlendMode(.sourceAtop)
ctx?.fill(rect)
let image = UIGraphicsGetImageFromCurrentImageContext()
现在图像看起来像this
调整 ctx?.setAlpha() 不是解决方案,因为我想要一个鲜红色保持体积view
还有其他解决办法吗?
谢谢*2
【问题讨论】:
您看到了预期的行为。当您设置精灵节点的颜色时,您指定的颜色与纹理的颜色混合并应用于精灵。设置精灵的颜色不会改变纹理的颜色。如果您用您想要实现的目标更新您的问题,例如为什么需要从精灵节点创建图像,那么有人可能会为您提供有用的解决方案。 【参考方案1】:使用SKView.texture(from:SKNode)
来实现你想要的。
let sprite = SKSpriteNode(imageNamed: "fishka")
sprite.blendMode = .alpha
sprite.colorBlendFactor = 1
sprite.color = UIColor.red
var fishka = UIImage?
autoreleasepool
fishka = scene!.view!.texture(from:sprite)
【讨论】:
是的!这正是我需要的:view.texture(from:sprite) 谢谢!以上是关于如何从 SKSpriteNode 获取 UIImage的主要内容,如果未能解决你的问题,请参考以下文章
如何通过physicsBody获取SKSpriteNode?
有没有办法从代码中获取放置在场景编辑器中的 SKSpriteNode 的当前位置? - 精灵套件
如何获取场景中不可见的 SKSpriteNode 的节点数?