2012-06-28 45 views
1

有沒有人一個想法如何一個UIImage轉換的Cocos2D-X CCSprite。 我最新的嘗試是: 1. Store中的UIImage爲png格式在手機上 2.將PNG作爲CCSprite的cocos2d-X轉換的UIImage到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; 
} 

我不明白沃爾澤王家的建議是如何工作的 http://cocos2d-x.org/boards/6/topics/3922

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

回答

0

我爲自己的問題得到了解決方案。該CCDirector初始化之前不能創建一個CCSprite。有缺少一些配置設置和科科斯釋放它實例化後,右側的圖像。

2
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; 
} 
+0

嗨得到它,歡迎SO。回答是好的,但我們想鼓勵你提供一些背景和解釋:這可能幫助人們有類似的問題,以瞭解如何解決這些問題。再次歡迎! –

+0

一個malloc,但沒有免費的嗎?那好嗎? – Jonny

+0

@Jonny Cocos在發佈時銷燬東西,我很確定它也釋放了它。 – TankorSmash

0

保存的UIImage到文檔目錄第一

現在用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()));