cocos2d-x使用OpenGL获取屏幕截图

今天就来说说cocos2d-x中使用OpenGL获取屏幕截图吧,因为网上关于cocos2d-x的入门教程非常多,所以我就只写一些用cocos2d-x实现具体功能的文章跟大家分享啦~

截图在游戏中经常会用到的,像社交分享中啊什么的分享的时候都会带截图的。

OpenGL是通过读取屏幕像素来保存图像的,下面说具体实现(代码中会有必要的注释):

void glReadPixels(GLint x, GLint y, GLsizei width, GLsizei height, GLenum format, GLenum type, GLvoid *pixels);
//这个函数将当前屏幕上的像素读取到一个内存块pixels中

 

unsigned char screenBuffer[1024*1024*8];//首先声明一个数组储存像素数据
void HelloWorld::menuCallback(CCObject* pSender)
{
   CCSize size = CCDirector::sharedDirector()->getWinSize();
   int w = size.width;
   int h = size.height;
   int myDataLength = w * h *4;

   GLubyte *buffer = screenBuffer;

   glReadPixels(0,0, w, h,GL_RGBA,GL_UNSIGNED_BYTE, buffer);

   CCImage *image = new CCImage();


   //翻转  OpenGL的绘制是从上到下的,这样得到的是垂直翻转的图像,要翻转回来
   GLubyte *buffer2 = (GLubyte *)malloc(myDataLength);

   for(int y =0; y < h; y++) {

       for(int x =0; x < w *4; x++) {

            buffer2[(h -1- y) * w *4+ x] = buffer[y *4* w + x];

        }

    }

    image->initWithImageData(buffer2, myDataLength,CCImage::kFmtRawData, w, h);

    free(buffer2);

    image->saveToFile(".../screen.png");  //设置保存目录和文件名

     image->release();

}

ok,就是如此简单,上面我们使用了saveToFile来存储到指定的目录,当然如果是ios的话也可以调用oc的方法将截图存到相册中,保存到相册的话要传递一个UIImage对象,因为这里我们用的是cocos2d-x,所以我先把截图存到沙盒中(上面设置目录的时候写到沙盒里就ok了),然后读取PNG创建一个UIImage对象

 UIImage *uiimage = [UIImage imageWithContentsOfFile:path];

再把UIImage对象存到相册中:(社交分享也是类似的方法啦,参考相关的SDK文档就行~)

UIImageWriteToSavedPhotosAlbum(uiimage, nil, nil, nil);  




 

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值