渲染/快照SpriteKit场景到NSImage [英] Render/Snapshot SpriteKit Scene to NSImage
问题描述
有没有人知道如何快照一个完整的 SKView
或 SKScene
NSImage ?
我们已经能够使用 textureFromNode
API创建 SKTexture
从一个节点及其所有子节点。但是到目前为止,我们不能找出一种方法来提取图像数据到一个 NSImage
。我们正在构建一个混合的 Cocoa
/ SpriteKit
应用程序,我们需要提取场景的小缩略图。
drawViewHierarchyInRect
UIImage >: UIGraphicsBeginImageContextWithOptions(self.view.bounds.size,NO,scale);
[self drawViewHierarchyInRect:self.bounds afterScreenUpdates:YES];
UIImage * viewImage = UIGraphicsGetImageFromCurrentImageContext();
UIGraphicsEndImageContext();
但是如何在 Cocoa
NSImage
?帮助。
还没有直接访问SKTexture的图像数据。您可以将节点显示在离屏场景中并捕获视图层次结构。我在iOS中使用这个代码作为参考:
class func imageFromNode(node:SKNode,inScene scene:SKScene) UIImage? {
if let texture = scene.view?.textureFromNode(node){
let view = SKView(frame:CGRect(origin:CGPointZero,size:texture.size()))
.allowsTransparency = true
view.backgroundColor = SKColor.clearColor()
let scene = SKScene(size:view.bounds.size)
scene.view?.allowsTransparency = true
scene.backgroundColor = SKColor.clearColor()
let sprite = SKSpriteNode(texture:texture)
sprite.position = CGPoint(x:CGRectGetMidX(view.frame),y :CGRectGetMidY(view.frame))
scene.addChild(sprite)
view.presentScene(scene)
UIGraphicsBeginImageContextWithOptions(view.bounds.size,false,0.0)
view。 drawViewHierarchyInRect(view.bounds,afterScreenUpdates:true)
let image = UIGraphicsGetImageFromCurrentImageContext()
UIGraphicsEndImageContext()
return image
}
return nil
} b $ b
Does anyone know how to "snapshot" a complete SKView
or SKScene
into an NSImage
?
We have been able to use the textureFromNode
API to create an SKTexture
from a node and all its children. But so far we can't figure out a way to extract the image data into say an NSImage
. We are building a mixed Cocoa
/ SpriteKit
app where we need to extract small thumbnails of scenes.
Again, this seems possible on iOS (to get a UIImage
) using drawViewHierarchyInRect
:
UIGraphicsBeginImageContextWithOptions(self.view.bounds.size, NO, scale);
[self drawViewHierarchyInRect:self.bounds afterScreenUpdates:YES];
UIImage *viewImage = UIGraphicsGetImageFromCurrentImageContext();
UIGraphicsEndImageContext();
But how to do this on Cocoa
with NSImage
? Help.
There's no direct access to the image data from a SKTexture yet. You can present the node in a offscreen scene and capture the view hierarchy. I use this code in iOS for reference:
class func imageFromNode(node : SKNode, inScene scene: SKScene) -> UIImage? {
if let texture = scene.view?.textureFromNode(node) {
let view = SKView(frame: CGRect(origin: CGPointZero, size: texture.size()))
view.allowsTransparency = true
view.backgroundColor = SKColor.clearColor()
let scene = SKScene(size: view.bounds.size)
scene.view?.allowsTransparency = true
scene.backgroundColor = SKColor.clearColor()
let sprite = SKSpriteNode(texture: texture)
sprite.position = CGPoint(x: CGRectGetMidX(view.frame), y: CGRectGetMidY(view.frame))
scene.addChild(sprite)
view.presentScene(scene)
UIGraphicsBeginImageContextWithOptions(view.bounds.size, false, 0.0)
view.drawViewHierarchyInRect(view.bounds, afterScreenUpdates: true)
let image = UIGraphicsGetImageFromCurrentImageContext()
UIGraphicsEndImageContext()
return image
}
return nil
}
这篇关于渲染/快照SpriteKit场景到NSImage的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!