渲染/快照SpriteKit场景到NSImage [英] Render/Snapshot SpriteKit Scene to NSImage

查看:239
本文介绍了渲染/快照SpriteKit场景到NSImage的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!

问题描述

有没有人知道如何快照一个完整的 SKView SKScene NSImage ?



我们已经能够使用 textureFromNode API创建 SKTexture 从一个节点及其所有子节点。但是到目前为止,我们不能找出一种方法来提取图像数据到一个 NSImage 。我们正在构建一个混合的 Cocoa / SpriteKit 应用程序,我们需要提取场景的小缩略图。

$再次,这似乎可能在iOS上(使用 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屋!

查看全文
登录 关闭
扫码关注1秒登录
发送“验证码”获取 | 15天全站免登陆