// 截取整屏
CCRenderTexture *texture = CCRenderTexture::create(WINSIZE_WIDTH, WINSIZE_HEIGHT/*530, 409*/);
texture->setPosition(ccp(141, 416));
texture->ignoreAnchorPointForPosition(true);
texture->setAnchorPoint(CCPointZero);
// 开始渲染
texture->begin();
// 访问当前运行屏幕 上的每个子结点
CCDirector::sharedDirector()->getRunningScene()->visit();
// 结束绘制
texture->end();
// 保存抓取到的图片
if (texture->saveToFile("../Resources/screenshot/screenshot.png"/*, kCCImageFormatPNG*/))
{
CCLOG("screenshot success");
showScreenshot(); // 显示出截取的图片
}
else
{
CCLOG("screenshot failed");
}
然后showScreenshot就是将刚才保存的图片,显示出来的函数
代码如下
void CPaintLayer::showScreenshot()
{
std::string strFilePath = CCFileUtils::sharedFileUtils()-fullPathForFilename("../Resources/screenshot/screenshot.png");
CCSprite *sprite = CCSprite::create(strFilePath.c_str(), CCRectMake(161, 57, 490, 409));//
sprite->setScale(0.7f);
sprite->setPosition(ccp(WINSIZE_WIDTH * 0.5f, WINSIZE_HEIGHT * 0.5f));
this->addChild(sprite, HIGHEST, SCREENSHOT_TAG);
}
现在的问题是,我第一次截图,显示出来了,然后我把界面改变一下(主要是通过滑屏改变了一下) 后再截图, 这次显示出来的,还是上一次所截的图,但我到保存截图的文件夹下查看,保存的确实是当前界面截的,但在程序中显示出来的却是上一次截图的内容,这实在太奇怪了。
后来自己也作了些修改,像调用CCRenderTexture的clear 清除一下内容,显示以后把用于显示截图的精灵移除之类,都是没有结果。
想不通这是为什么,求指教指教。
5 个解决方案
#1
你两次截图都是在一次运行中进行的不?(就是程序没有关闭过)
如果是的话,估计就是图片缓存的问题了,你第一次调用showScreenshot函数的时候,图片screenshot.png被加载,同时也缓存起来了。
于是你第二次截图之后,再次调用showScreenshot函数,这时候显然就是从缓存中加载图片的,所以你看到的仍然是旧的图片~
如果是的话,估计就是图片缓存的问题了,你第一次调用showScreenshot函数的时候,图片screenshot.png被加载,同时也缓存起来了。
于是你第二次截图之后,再次调用showScreenshot函数,这时候显然就是从缓存中加载图片的,所以你看到的仍然是旧的图片~
#2
我也觉得是缓存问题,但这类似乎没有什么清除缓存的方法,唯一看到的就一个 CCRenderTexture的clear
#3
我错了,之前我也尝试了用CCTextureCache来得到纹理,给精灵去显示,却没想到用它来清除缓存。
原来还有个CCTextureCache::sharedTextureCache()->removeUnusedTextures();
现在可以了
原来还有个CCTextureCache::sharedTextureCache()->removeUnusedTextures();
现在可以了
#4
CCSize size = CCDirector :: sharedDirector()->getWinSize();//获得窗口的大小
std::string filePath = CCFileUtils::sharedFileUtils()->getWritablePath() + "pyf.png";
这些语句具体都是什么意思啊?求大神
std::string filePath = CCFileUtils::sharedFileUtils()->getWritablePath() + "pyf.png";
这些语句具体都是什么意思啊?求大神
#5
std::string filePath = CCFileUtils::sharedFileUtils()->getWritablePath() + "pyf.png";
CCSprite* sp = CCSprite::create(filePath.c_str());
是这二句看不懂
CCSprite* sp = CCSprite::create(filePath.c_str());
是这二句看不懂
#1
你两次截图都是在一次运行中进行的不?(就是程序没有关闭过)
如果是的话,估计就是图片缓存的问题了,你第一次调用showScreenshot函数的时候,图片screenshot.png被加载,同时也缓存起来了。
于是你第二次截图之后,再次调用showScreenshot函数,这时候显然就是从缓存中加载图片的,所以你看到的仍然是旧的图片~
如果是的话,估计就是图片缓存的问题了,你第一次调用showScreenshot函数的时候,图片screenshot.png被加载,同时也缓存起来了。
于是你第二次截图之后,再次调用showScreenshot函数,这时候显然就是从缓存中加载图片的,所以你看到的仍然是旧的图片~
#2
我也觉得是缓存问题,但这类似乎没有什么清除缓存的方法,唯一看到的就一个 CCRenderTexture的clear
#3
我错了,之前我也尝试了用CCTextureCache来得到纹理,给精灵去显示,却没想到用它来清除缓存。
原来还有个CCTextureCache::sharedTextureCache()->removeUnusedTextures();
现在可以了
原来还有个CCTextureCache::sharedTextureCache()->removeUnusedTextures();
现在可以了
#4
CCSize size = CCDirector :: sharedDirector()->getWinSize();//获得窗口的大小
std::string filePath = CCFileUtils::sharedFileUtils()->getWritablePath() + "pyf.png";
这些语句具体都是什么意思啊?求大神
std::string filePath = CCFileUtils::sharedFileUtils()->getWritablePath() + "pyf.png";
这些语句具体都是什么意思啊?求大神
#5
std::string filePath = CCFileUtils::sharedFileUtils()->getWritablePath() + "pyf.png";
CCSprite* sp = CCSprite::create(filePath.c_str());
是这二句看不懂
CCSprite* sp = CCSprite::create(filePath.c_str());
是这二句看不懂