【问题标题】:cocos2d-x convert UIImage to CCSpritecocos2d-x 将 UIImage 转换为 CCSprite
【发布时间】:2012-06-28 16:38:49
【问题描述】:

有人知道如何将 UIImage 转换为 cocos2d-x CCSprite。 我最近的尝试是: 1.将UIImage保存为png在手机上 2.将png加载为CCSprite

[UIImagePNGRepresentation(photo) writeToFile:imagePath atomically:true];
CCSprite *sprite = CCSprite::spriteWithFile(imagePath);

但这在 CCObject 保留函数中崩溃了

void CCObject::retain(void)
{
    CCAssert(m_uReference > 0, "reference count should greater than 0");

    ++m_uReference;
}

而且我不明白 Walzer Wang 的建议是如何运作的 http://cocos2d-x.org/boards/6/topics/3922

CCImage::initWithImageData(void* pData, int nDataLen, ...)
CCTexture2D::initWithImage(CCImage* uiImage);
CCSprite::initWithTexture(CCTexture2D* pTexture);

【问题讨论】:

    标签: cocos2d-iphone uiimage ccsprite cocos2d-x


    【解决方案1】:
    CCSprite* getCCSpriteFromUIImage(UIImage *photo) {
        CCImage *imf =new CCImage();
        NSData *imgData = UIImagePNGRepresentation(photo);
        NSUInteger len = [imgData length];
        Byte *byteData = (Byte*)malloc(len);
        memcpy(byteData, [imgData bytes], len);
        imf->initWithImageData(byteData,imgData.length);
        imf->autorelease();
        CCTexture2D* pTexture = new CCTexture2D();
        pTexture->initWithImage(imf);
        pTexture->autorelease();
        CCSprite *sprit = new CCSprite();
        sprit->createWithTexture(pTexture);
        sprit->autorelease();
        DebugLog("size :%f :%f ",sprit->getContentSize().width , sprit->getContentSize().height);
    
        return sprit;
    }
    

    【讨论】:

    • 您好,欢迎来到 SO。回答很好,但我们希望鼓励您提供一些上下文和解释:这可能有助于有类似问题的人了解如何解决它们。再次欢迎!
    • 一个malloc,但没有免费的?可以吗?
    • @Jonny Cocos 在发布时会破坏东西,我敢肯定它也会释放它。
    【解决方案2】:

    我为自己的问题找到了解决方案。在 CCDirector 初始化之前不能创建 CCSprite。缺少一些配置设置,并且 cocos 在实例化后立即释放图像。

    【讨论】:

      【解决方案3】:

      先保存uiimage到documents目录

      现在使用 getWritablePath 获取它

      Texture2D* newTexture2D = new Texture2D();
      Image* JpgImage     = new Image();
      
      JpgImage->initWithImageFile("your image path.jpg");
      newTexture2D->initWithData(JpgImage->getData(),JpgImage->getDataLen(),Texture2D::PixelFormat::RGB888,JpgImage->getWidth(),JpgImage->getHeight(),Size(JpgImage->getWidth(),JpgImage->getHeight()));
      

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 2012-10-19
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2014-01-24
        • 1970-01-01
        相关资源
        最近更新 更多