如何从 SKSpriteNode 获取 UIImage

how to get UIImage from SKSpriteNode

我从 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

使用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)
}