首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >如何将CCSpriteBatchNode转换为UIImage?

如何将CCSpriteBatchNode转换为UIImage?
EN

Stack Overflow用户
提问于 2012-07-11 14:06:56
回答 1查看 574关注 0票数 2

我想把CCSpriteBatchNode转换成UIImage,有没有可行的方法?我知道可以将CCSprite转换为UIImage,但当我用CCSpriteBatchNode尝试它时,它崩溃了:

代码语言:javascript
复制
*** Terminating app due to uncaught exception 'NSInternalInconsistencyException', reason: 'CCSpriteBatchNode should NOT be root node'

谢谢!

下面是将CCSprite转换为UIImage的代码。

代码语言:javascript
复制
+ (UIImage *)renderUIImageFromSprite:(CCSprite *)sprite {
    CCRenderTexture *renderer = [CCRenderTexture renderTextureWithWidth:sprite.contentSize.width; height:sprite.contentSize.height;];
    [renderer begin];
    [sprite visit];
    [renderer end];
    return [renderer getUIImageFromBuffer];
}

编辑:这是工作代码。

代码语言:javascript
复制
+ (UIImage *)renderUIImageFromCCLabelBMFont:(CCLabelBMFont *)bmfont {
    GLProgram *program = [[CCShaderCache sharedShaderCache] programForKey:kCCShader_PositionTextureColor];
    glUseProgram(program->program_);

    int textureWidth = bmfont.contentSize.width;
    int textureHeight = bmfont.contentSize.height;

    CCRenderTexture *renderer = [CCRenderTexture renderTextureWithWidth:textureWidth height:textureHeight];
    bmfont.anchorPoint = ccp(0.0, 0.0);

    CCNode *node = [CCNode node];
    [node addChild:bmfont];

    [renderer begin];
    [node visit];
    [renderer end];

    return [renderer getUIImageFromBuffer];
}
EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2012-07-16 21:23:48

我自己也需要这个。这是ARC代码,并设置为CCLabelBMFont的类别。

CCLabelBMFont+UIImage.h

代码语言:javascript
复制
@interface CCLabelBMFont (UIImage)

- (UIImage *)image;

@end

CCLabelBMFont+UIImage.m

代码语言:javascript
复制
@implementation CCLabelBMFont (UIImage)

- (UIImage *)image
{
    CCGLProgram *program = [[CCShaderCache sharedShaderCache] programForKey:kCCShader_PositionTextureColor];
    glUseProgram(program->program_);

    CCRenderTexture *renderer = [[CCRenderTexture alloc] initWithWidth:(int)self.contentSize.width
                                                                height:(int)self.contentSize.height
                                                           pixelFormat:kCCTexture2DPixelFormat_RGBA8888];

    CCLabelBMFont *labelBMFont = [[CCLabelBMFont alloc] initWithString:string_
                                                               fntFile:fntFile_
                                                                 width:width_
                                                             alignment:alignment_
                                                           imageOffset:imageOffset_];

    labelBMFont.anchorPoint = ccp(0.0, 0.0);

    CCNode *node = [CCNode node];
    [node addChild:labelBMFont];

    [renderer begin];
    [node visit];
    [renderer end];

    return [renderer getUIImage];
}

@end
票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/11426500

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档