今天就来说说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);