Do you really need save render to image? You can use render->getSprite() to load sprite.
Also, by default saveToFile set bool isRGBA to true, try set it to false like this render->saveToFile("SavedFileName", Image::Format::PNG, false) if it not help try Image::Format::JPG.
I need to save file and use it in other place. It works well on iOS but not on Android. By the way, I don’t know what location that the file is stored in Android.
Ok, i tested you code example. I think i know what you problem. saveToFile need time, so you need check if render finish saving file. Better use callback for this, for example lambda
auto drawSprite = this->getChildByName("drawSprite "); // this is a sprite , I added this in my code . auto drawSprite = Sprite::create("...") ..v..v..
Size pixelSize = Director::getInstance()->getWinSizeInPixels();
auto renderTexture = RenderTexture::create(drawSprite->getBoundingBox().size.width, drawSprite->getBoundingBox().size.height);
renderTexture->retain();
renderTexture->setKeepMatrix(true);
renderTexture->setVirtualViewport(Vec2(162,768-473), Rect(0, 0, 1136,768), Rect(0, 0, pixelSize.width, pixelSize.height));
renderTexture->beginWithClear(0, 0, 0, 0);
drawSprite->visit();
renderTexture->end();
std::string fileName = "avatar.png";
renderTexture->saveToFile(fileName, Image::Format::PNG, true, CC_CALLBACK_2(HelloWorld::saveToFileCallback, this));
//Add this function to avoid crash if we switch to a new scene.
//On android , I added this line to fix crash at Layer::OnDraw function
Director::getInstance()->getRenderer()->render();
...........................................................................
...........................................................................
void HelloWorld::saveToFileCallback(cocos2d::RenderTexture * renderTexture, const
std::string & pathFile)
{
if (m_sprite&& !pathFile.empty())
{
TextureCache::getInstance()->removeTexture(m_sprite->getTexture());
m_sprite->setSpriteFrame(Sprite::create(pathFile)->getSpriteFrame());
m_sprite->setScale(0.555555556f);
renderTexture->setKeepMatrix(false);
}
}