如何将CCSprite图像转换为UIImage?

时间:2012-10-30 09:39:53

标签: cocos2d-iphone uiimage ccsprite

作为标题,我已经提到了下面的代码

CCSprite *sprite = (CCSprite *)node;
CCTexture2D *texture2d = [sprite texture];

如何从精灵获得UIImage * p?

4 个答案:

答案 0 :(得分:6)

在您的情况下,只需在您的班级中添加下一个方法:

 - (UIImage *) imageFromSprite :(CCSprite *)sprite
{
    int tx = sprite.contentSize.width;
    int ty = sprite.contentSize.height;

    CCRenderTexture *renderer   = [CCRenderTexture renderTextureWithWidth:tx height:ty];

    sprite.anchorPoint  = CGPointZero;

    [renderer begin];
    [sprite visit];
    [renderer end];

    return [renderer getUIImage];
}

使用方法:

CCSprite *sprite = (CCSprite *)node;
UIImage *p = [self imageFromSprite:sprite]

答案 1 :(得分:4)

... UHH

我认为这是一个更好的方式。在CCNode上将其添加为类别。

-(UIImage*)image {
    CCRenderTexture* renderer = [CCRenderTexture renderTextureWithWidth:self.contentSize.width height:self.contentSize.height];

    const CGPoint ANCHORBEFORE = self.anchorPoint;
    self.anchorPoint = CGPointZero;

    [renderer begin];
    [self visit];
    [renderer end];
    self.anchorPoint = ANCHORBEFORE;

    return [renderer getUIImage];
}

答案 2 :(得分:2)

如果您使用的是cocos2d 2.x,请将精灵渲染到CCRenderTexture中,并调用该渲染纹理的getUIImage方法。

答案 3 :(得分:0)

通过查看CCSprite和CCTexture2D的源代码,您可以看到图像仅用于创建纹理数据,图像对象不会被保留但是暂时使用。

CCTexture2D 来源:

http://code.google.com/p/cocos2d-iphone/source/browse/trunk/cocos2d/CCTexture2D.m?r=1882

CCSprite 来源:

http://code.google.com/p/cocos2d-iphone/source/browse/trunk/cocos2d/CCSprite.m?r=1747

查看使用CGImageRef

的init方法