我知道在 cocos2d 中,有一个简单的方法可以使用 [UIImage imageWithData:[renderer getUIImageAsDataFromBuffer:kCCImageFormatPNG]] 将 CCSprite 转换为 UIImage。但是在 cocos2d-x 中,CCRender 没有 getUIImageAsDataFromBuffer 这样的 API 来做转换。我想知道 cocos2d-x 下有没有可能将 CCSprite 转换为 UIImage 的方法?
问问题
2028 次
4 回答
1
CCSprite 包含 CCTexture2D(可通过 访问getTexture()
),尝试使用它。如果没有更好的方法,您也可以将纹理放入CCImage
并使用。CCImage::saveToFile()
于 2013-05-30T16:21:28.687 回答
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();
并使用这个自定义类:
您可以将 CCSprite 生成到 UIImage 中。
于 2014-09-03T15:21:48.453 回答
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,用于在其上添加要显示的图像。考虑到您需要在头文件中添加方法。
于 2014-09-03T11:03:22.000 回答
0
这是UIImage
我用来从CCImage
to的类别UIImage
:
#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
于 2013-07-24T22:10:13.483 回答