2013-05-30 24 views
2

我知道在cocos2d中,通過使用 [UIImage imageWithData:[renderer getUIImageAsDataFromBuffer:kCCImageFormatPNG]],可以將CCSprite轉換爲UIImage。 但是,在cocos2d-x中,CCRender沒有getUIImageAsDataFromBuffer這樣的API來執行轉換。我不知道是否有任何可能的方式來將CCSprite轉換爲Cocos2d-x下的UIImage?如何將CCSprite轉換爲cocos2d-x中的UIImage?

回答

1

CCSprite包含CCTexture2D(可通過getTexture()訪問),請嘗試使用它。如果沒有更好的方法,您也可以將紋理貼圖到CCImage,並使用CCImage::saveToFile()

0

這裏的UIImage類我使用去從CCImageUIImage

#import "UIImage+Conversions.h" 

@implementation UIImage (Conversions) 

+ (UIImage *) imageFromCCImage:(cocos2d::CCImage *) ccImage { 
    NSUInteger bytesPerPixel = 4; 
    CGDataProviderRef provider = CGDataProviderCreateWithData(NULL, 
                   ccImage->getData(), 
                   ccImage->getDataLen() * bytesPerPixel, 
                   NULL); 

    CGColorSpaceRef colorSpaceRef = CGColorSpaceCreateDeviceRGB(); 
    CGBitmapInfo bitmapInfo = kCGBitmapByteOrderDefault; 
    CGColorRenderingIntent renderingIntent = kCGRenderingIntentDefault; 

    NSUInteger scanWidth = ccImage->getWidth() * bytesPerPixel; 
    CGImageRef imageRef = CGImageCreate(ccImage->getWidth(), 
             ccImage->getHeight(), 
             8, 
             bytesPerPixel * 8, 
             scanWidth, 
             colorSpaceRef, 
             bitmapInfo, 
             provider, 
             NULL, 
             NO, 
             renderingIntent); 

    UIImage *image = [UIImage imageWithCGImage:imageRef]; 
    CGColorSpaceRelease(colorSpaceRef); 
    CGImageRelease(imageRef); 

    return image; 
} 

@end 
0

您在有一個方法的UIImageView稱爲loadTexture()這需要一個文件路徑和轉換文件路徑成圖像將其加載到UIImageView。但這並不是必要的做法,所以我們需要實現哪些需要CCNode新的方法,我用CCNode這裏可以添加CCNode的任何兒童包括CCSprite

void ImageView::addNode(CCNode* node){ 
    if (!node) 
    { 
     CCLOG("node is null"); 
     return; 
    } 

    CCNode::removeChild(_imageRenderer); 
    _imageRenderer = NULL; 
    _textureFile = ""; 
    _imageTexType = UI_TEX_TYPE_PLIST; 
    _imageRenderer = node; 
    CCNode::addChild(_imageRenderer, IMAGE_RENDERER_Z, -1); 
    _imageTextureSize = _imageRenderer->getContentSize(); 
    imageTextureScaleChangedWithSize(); 
    updateAnchorPoint(); 
    updateFlippedY(); 
    updateRGBAToRenderer(_imageRenderer); 
    _imageRenderer->setPosition(getPosition()); 
} 

此方法刪除並註銷該_imageRenderer屬性,該屬性是一個CCNode用於添加你的圖像在它上面顯示。考慮到你需要在頭文件中添加該方法。

0

你可以這樣做:

CCRenderTextureEx* texture = CCRenderTextureEx::create(size.width, size.height); 
texture->setPosition(ccp(size.width * 0.5f, size.height * 0.5f)); 
texture->begin(); 
sprite->visit(); 
texture->end(); 
texture->saveToFile(path->getCString(), kCCImageFormatPNG); 
texture->saveImage(); 

並使用該自定義類:

https://github.com/radif/mcbPlatformSupport/blob/master/mcbPlatformSupport/ios/utils/CCRenderTextureEx.mm

您可以生成一個CCSprite到UIImage的。