使用Alpha通道将SKTexture导出到UIImage

时间:2014-05-18 07:35:32

标签: ios objective-c uiimage sprite-kit sktexture

我希望能够将我的SKTexture导出到外部图像文件。我已经能够使用以下代码实现此目的。然而,即使视图不透明且所有背景颜色都设置为清晰,它也会受到忽略alpha通道的严重缺陷。

- (void)export:(CGRect)bounds texture:(SKTexture *)texture path:(NSString *)path{
    UIGraphicsBeginImageContextWithOptions(bounds.size, NO, [UIScreen mainScreen].scale);
    SKView *view = [[SKView alloc] initWithFrame:bounds];
    SKScene *scene = [SKScene sceneWithSize:CGSizeMake(bounds.size.width, bounds.size.height)];

    view.opaque = NO;
    view.backgroundColor = [UIColor clearColor];
    scene.backgroundColor = [UIColor clearColor];

    SKSpriteNode *node = [SKSpriteNode spriteNodeWithTexture:texture];
    node.position = CGPointMake(bounds.size.width/2, bounds.size.height/2);
    [scene addChild:node];
    [view presentScene:scene];
    [view drawViewHierarchyInRect:bounds afterScreenUpdates:YES];
    UIImage *snapshotImage = UIGraphicsGetImageFromCurrentImageContext();
    UIGraphicsEndImageContext();

    [UIImagePNGRepresentation(snapshotImage) writeToFile:path atomically:YES];
}

我是否有任何改动可以使当前的解决方案允许导出包含alpha值的图像?

是否有更明显的方法将纹理导出到图像?

意图: 我正在导出的纹理是从SKShapeNode的游戏加载中生成的,以便解决SKShapeNode的陷阱。为了避免纹理生成开销,我想将它们导出为图像,而是直接从纹理图集中加载这些纹理。

1 个答案:

答案 0 :(得分:1)

无论如何都没有为导出的纹理实现透明背景。

根据这个SO问题SKScene cannot be transparent,可能的原因是SpriteKit使用的帧缓冲由于性能原因而不允许这种透明度。