截屏bug,tableView截取不全

我使用下面代码截屏:

CCSize size = CCDirector::sharedDirector()->getWinSize();
//定义一个屏幕大小的渲染纹理
CCRenderTexture* pScreen = CCRenderTexture::create(size.width,size.height, kCCTexture2DPixelFormat_RGBA8888);
//获得当前的场景指针
CCScene* pCurScene = CCDirector::sharedDirector()->getRunningScene();
//渲染纹理开始捕捉
pScreen->begin();
//当前场景参与绘制
pCurScene->visit();
//结束捕捉
pScreen->end();
//保存为图片
pScreen->saveToFile(“screen001.png”, kCCImageFormatJPEG);

CC_SAFE_DELETE(pScreen);

结果出来的图片screen001.png中,有部分好像没显示出来。这个没显示出来的部分是在CCTableView内。

使用的测试环境是:iphone5,iOS SDK 7.1,cocos2d-x 2.1.5。

各位知道是什么问题吗???

参考此文:http://www.cocoachina.com/bbs/read.php?tid=196339

不会发图,附件里面是截图

tableView的区域是红色框,手机显示是在红色区域的。但是截屏后,只显示蓝色框的区域!

你的贴子没有提到这个bug哦,老兄

我按之前那个截图整合到Director的教程,整入Cocos2d-x 3.0版。然后对TestCpp的Extensions中的TabelviewTest进行截图,都没问题啊。

我这边测试了我游戏所有的tableView相关场景的截图,都是左边、下边没有显示全。没有tableview的场景不会有这种情况。

上图在程序运行的手机截图是:

我使用你的代码在testcpp测试了,对TestCpp的Extensions中的TabelviewTest进行截图,结果也是有bug。如下图,左边的table显示不全,右边的table完全没显示出来

我对TableViewTestScene的修改在1楼附件,麻烦看看有啥不对。我使用iphone5调试的。修改部分使用“//新增”注释了

我也碰到了,楼主怎么解决的???

没有解决哦,找不到原因

//CCTableView在截屏后所得图片的可视区域看起来变小了,这里是加大 以供截屏后正常显示,而且位置还会偏移
CCSize listsize = m_MoveRanking->m_pTableView->getViewSize();
m_MoveRanking->m_pTableView->setViewSize(CCSizeMake(listsize.width * 1.2, listsize.height * 1.2));
m_MoveRanking->setPositionX(m_MoveRanking->getPositionX()+38);
m_MoveRanking->setPositionY(m_MoveRanking->getPositionY()+45);
CCSize winsize = CCDirector::sharedDirector()->getWinSize();
CCRenderTexture * screen = CCRenderTexture::create(winsize.width, winsize.height);
CCScene * scene = CCDirector::sharedDirector()->getRunningScene();
screen->begin();
scene->visit();
screen->end();
screen->saveToFile(“cocos2d-x-screenshot.png”, kCCImageFormatPNG);
MyLog(“path = %s”, CCFileUtils::sharedFileUtils()->getWritablePath().c_str());
//还原listsize
m_MoveRanking->m_pTableView->setViewSize(listsize);
m_MoveRanking->setPositionX(m_MoveRanking->getPositionX()-38);
m_MoveRanking->setPositionY(m_MoveRanking->getPositionY()-45);
CC_SAFE_DELETE(screen);

我当时在做排行的时候也遇到这个问题,那时候用的是2.1.4版本,C++开发。我的解决方案是:
//CCTableView在截屏后所得图片的可视区域看起来变小了,这里是加大 以供截屏后正常显示,而且位置还会偏移
CCSize listsize = m_MoveRanking->m_pTableView->getViewSize();
m_MoveRanking->m_pTableView->setViewSize(CCSizeMake(listsize.width * 1.2, listsize.height * 1.2));
m_MoveRanking->setPositionX(m_MoveRanking->getPositionX()+38);
m_MoveRanking->setPositionY(m_MoveRanking->getPositionY()+45);
CCSize winsize = CCDirector::sharedDirector()->getWinSize();
CCRenderTexture * screen = CCRenderTexture::create(winsize.width, winsize.height);
CCScene * scene = CCDirector::sharedDirector()->getRunningScene();
screen->begin();
scene->visit();
screen->end();
screen->saveToFile(“cocos2d-x-screenshot.png”, kCCImageFormatPNG);
MyLog(“path = %s”, CCFileUtils::sharedFileUtils()->getWritablePath().c_str());
//还原listsize
m_MoveRanking->m_pTableView->setViewSize(listsize);
m_MoveRanking->setPositionX(m_MoveRanking->getPositionX()-38);
m_MoveRanking->setPositionY(m_MoveRanking->getPositionY()-45);
CC_SAFE_DELETE(screen);
因为我发现截屏后得到的图片,tableview的位置和区域有变化,位置似乎偏移了,区域似乎缩小了,我就索性在截屏前扩大区域,调整位置,截屏后还原这些操作,这样就可以得到正确的图片。遗憾的是我现在使用3.3的版本,lua开发,在次使用这个方法无效了,请问你们有没有解决这个问题,我使用3.3lua开发后,怎么放大区域截图出来都一个鸟样,请问楼主有解决这个问题吗,当时我还以为3.x后会修复这个问题呢

//屏幕截图
void HelloWorld::capture(Ref* sender)
{
CCLOG(“ScreenShot”);
utils::captureScreen(CC_CALLBACK_2(HelloWorld::afterCapture, this), “ScreenShot.png”);
}

//截图后执行afterCapture
void HelloWorld::afterCapture(bool succeed, const std::string& outputFile)
{
if (succeed)
{
CCLOG("%s", outputFile.c_str());
//显示截图
Sprite* sp = Sprite::create(outputFile);
sp->setPosition(winSize / 2);
this->addChild(sp);
sp->setScale(0.25); //放缩
}
else
{
CCLOG(“Capture screen failed.”);
}
}

看到了吗,用cocos自带的函数captureScreen来截图,就ok了,毫无压力