2013年5月27日月曜日

cocos2d-xで画像データを表示する方法

メモリ上で作成したRAWデータの画像を表示したい場合、
CCTexture2Dでテクスチャを作成して、CCSpriteで表示する。

例えばこんな感じ。

CCSprite* createSpriteWithRawData(const void* data, unsigned int width, unsigned int height)
{
    CCTexture2D* texture = new CCTexture2D();
    if (texture && texture->initWithData(data, kCCTexture2DPixelFormat_RGBA8888, width, height, CCSizeMake(width, height))) {
        texture->autorelease();
        return CCSprite::createWithTexture(texture);
    }
    CC_SAFE_DELETE(texture);
    return NULL;
}
※ CCTexture2D::initWithDataは、dataをglTexture2Dに渡してグラフィックスハードウェアに転送している。
従ってdataをメモリ上に確保しておく必要はない。

ネットワーク経由で取得したPNGやJPG画像を表示したい場合などは、
CCImageで画像フォーマットを解析してから、CCTexture2DとCCSpriteで表示する。

例えばこんな感じ。

CCSprite* createSpriteWithPngData(void* data, unsigned long data_length)
{
    CCImage* image = new CCImage();
    if (image && image->initWithImageData(data, data_length, CCImage::kFmtPng)) {
        image->autorelease();
        CCTexture2D* texture = new CCTexture2D();
        if (texture && texture->initWithImage(image)) {
            texture->autorelease();
            return CCSprite::createWithTexture(texture);
        }
        CC_SAFE_DELETE(texture);
        return NULL;
    }
    CC_SAFE_DELETE(image);
    return NULL;
}
※ CCImage::initWithImageDataは、dataを必要に応じてコピーしている。
従ってdataをメモリ上に確保しておく必要はない。

0 件のコメント:

コメントを投稿