【发布时间】:2023-03-19 21:21:02
【问题描述】:
我在从 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
【问题讨论】:
-
您看到了预期的行为。当您设置精灵节点的颜色时,您指定的颜色与纹理的颜色混合并应用于精灵。设置精灵的颜色不会改变纹理的颜色。如果您用您想要实现的目标更新您的问题,例如为什么需要从精灵节点创建图像,那么有人可能会为您提供有用的解决方案。
标签: sprite-kit uiimage