如何从 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)
}
我从 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)
}