从CCSprite,CCTexture2D甚至直接从CCSpriteFrameCache获取CGImageRef?

时间:2012-03-01 06:43:15

标签: cocos2d-iphone

我编写了一些带有UIImage.CGImageRef并将其放入上下文的代码,以便我可以对其进行分析。一切都很好。但是,我现在希望在Cocos2D应用程序中实现此过程。

我的应用程序的所有图形都是使用Texture Packer作为精灵表完成的,所以我正在寻找任何方法来获取我需要的精灵表中的CGImageRef。

我的理论是你可以使用CGImageRef初始化一个CCSprite,为什么我不能简单地再把它取回来?

也许我错过了一些简单的东西,比如Cocos2D有一个CGImageRef等价物吗?

3 个答案:

答案 0 :(得分:1)

你可以尝试这样的smth

    CCRenderTexture *renderer = [CCRenderTexture renderTextureWithWidth:size.width height:size.height];
    [renderer begin];

    CCSpriteBatchNode *spriteSheet = [m_sprite batchNode];
    if (spriteSheet != nil) 
        [spriteSheet visit];
    else 
        [m_sprite visit];

    [renderer end];

    NSData* uidata = [renderer getUIImageAsDataFromBuffer:kCCTexture2DPixelFormat_RGBA8888];
    UIImage* uiimage = [UIImage imageWithData:uidata];

    CGImageRef image = [uiimage CGImage];

答案 1 :(得分:0)

您可以通过glReadPixels从OpenGL获取图像数据。它需要一些调整,但在性能方面是错误的解决方案。 OpenGL被设计为单向传送器(您传递数据而不读取它)。根据您的具体任务,您可以在从文件加载纹理时预加载图像数据。

例如,我们使用纹理的alpha通道进行逐像素触摸测试。因此,当我们加载图像时,我们将其alpha阈值的位掩码存储在内存中。

答案 2 :(得分:0)

无 cctexture直接从[CCTextureCache sharedTextureCache]读取照片文件 来自[CCSpriteFrameCache sharedSpriteFrameCache]的ccspriteframe直接读取“.plist”文件