我希望能够将我的 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 的缺陷。为了避免纹理生成开销,我想将它们导出为图像,而是直接从纹理图集中加载这些纹理。