cocos2d-x实现简易屏幕截图功能


在cocos2d-x开发包的test程序中有了截屏的例子,根据这个再加了一点内容:可以随意截取屏幕的某个部分,之后保存图片,两种格式,图片也能显示在屏幕。

http://download.csdn.net/detail/xexiyong/5720369

void HelloWorld::ccTouchesBegan(CCSet* pTouches, CCEvent* pEvent) 
{
	CCSetIterator kIterator = pTouches->begin();
	CCTouch* pTouch = (CCTouch*)(*kIterator);
	//按下触屏时记录开始触屏点
	m_kBeginPos = pTouch->locationInView( pTouch->view() );	
	m_kBeginPos = CCDirector::sharedDirector()->convertToGL( m_kBeginPos );
}


记录开始触屏的点,然后,记录离开触屏的点,经过计算:

void HelloWorld::ccTouchesEnded(CCSet* pTouches,CCEvent* pEvent)
{
	CCSetIterator kIterator = pTouches->begin();
	CCTouch* pTouch = (CCTouch*)(*kIterator);
	m_kEndPos = pTouch->locationInView( pTouch->view() );	
	m_kEndPos = CCDirector::sharedDirector()->convertToGL( m_kEndPos );
	//针对开始点与结束点的计算,得到定制的矩形
	CRectMake(m_kBeginPos,m_kEndPos);

	CCSize size = CCDirector::sharedDirector()->getWinSize();
	//定义一个屏幕大小的渲染纹理
	CCRenderTexture* pScreen = CCRenderTexture::renderTextureWithWidthAndHeight(size.width,size.height);
	//获得当前的场景指针
	CCScene* pCurScene = CCDirector::sharedDirector()->getRunningScene();
	//渲染纹理开始捕捉
	pScreen->begin();
	//当前场景参与绘制
	pCurScene->visit();
	//结束捕捉
	pScreen->end(false);
	//保存为png(经过裁切的)
	pScreen->saveBuffer(kCCImageFormatPNG, "Print.png",
		m_kRect.origin.x, m_kRect.origin.y,
		m_kRect.size.width, m_kRect.size.height);
	//保存为jpg,经过裁切的
	pScreen->saveBuffer(kCCImageFormatJPG,"Print.jpg",
		m_kRect.origin.x, m_kRect.origin.y,
		m_kRect.size.width, m_kRect.size.height);
	//得到该渲染纹理,将该纹理转为精灵经过裁切显示出来
	CCSprite* pTempImage = CCSprite::spriteWithTexture( 
		(pScreen->getSprite())->getTexture(),
		m_kRect	);
	pTempImage->setPosition(ccp(0,0));
	//Y翻转
	pTempImage->setFlipY(true);
	addChild(pTempImage,1);
	//结束且释放
	CC_SAFE_DELETE(pScreen);
}


其中,CRectMake函数作用是利用开始点与结束点算出矩形的宽高和基本点,以供文件生成和精灵显示 使用。

 

void HelloWorld::CRectMake(CCPoint point1,CCPoint point2)
{
	CCPoint kOriginPoint;
	if (point1.x < point2.x)
	{
		if (point1.y < point2.y)
		{
			kOriginPoint.x = point1.x;
			kOriginPoint.y = point2.y;
		} 
		else
		{
			kOriginPoint = point1;
		}
	} 
	else
	{
		if (point1.y < point2.y)
		{
			kOriginPoint = point2;
		} 
		else
		{
			kOriginPoint.x = point2.x;
			kOriginPoint.y = point1.y;
		}
	}
	//至此确定左上角点(是左下角点,cocos2d以左下为基准)
	m_kRect = CCRect(kOriginPoint.x,kOriginPoint.y - abs(point1.y - point2.y),abs(point1.x - point2.x),abs(point1.y - point2.y));
}


最终效果很生硬。大家去优化。

  • 0
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 2
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值