Cocos2d-x怎样实现截图分享功能
Cocos2d-x截图实现
以下是实现Cocos2d-x截图功能的代码:
#include "cocos2d.h"
USING_NS_CC;
// 设置纹理宽、高、像素质量
CCRenderTexture* tx = CCRenderTexture::create(
CCDirector::sharedDirector()->getWinSize().width,
CCDirector::sharedDirector()->getWinSize().height,
kCCTexture2DPixelFormat_RGBA8888
);
tx->begin();
CCDirector::sharedDirector()->getRunningScene()->visit();
tx->end();
tx->saveToFile(path, kCCImageFormatPNG);
上述代码中,首先创建了一个CCRenderTexture对象tx,其大小为当前窗口的大小,像素格式为RGBA8888。然后开始捕获屏幕内容,将当前运行场景的内容绘制到tx中,最后结束捕获并将内容保存为PNG格式的图片文件。图片将会保存在data/data/包名/files目录下。
Android下分享一张图片
在Android系统下分享一张图片,可使用以下Java代码:
Intent shareIntent = new Intent(Intent.ACTION_SEND);
// shareIntent.putExtra(Intent.EXTRA_TEXT, 文本);
String imgPath = 图片路径;
File file = new File(imgPath);
if (file.exists()) {
try {
// 一般情况下,保存的图片文件权限为rw- rw- rw-(外部可读写),但有的机型可能是rw- --- ---(外部不可读写),如果是后者会分享失败,因为外部不能读取这张图片。为了保证正常分享,需要通过chmod命令修改图片文件的权限。
// 修改文件权限为-rw-r--r--,外部可读
Process p = Runtime.getRuntime().exec("chmod 644 " + imgPath);
int status = p.waitFor(); // 让当前线程等待
if (status == 0) { // 返回0表示正常终止
Log.d(TAG, "chmod succeed");
} else {
Log.d(TAG, "chmod failure");
}
} catch (Exception e) {
e.printStackTrace();
}
Uri uri = Uri.fromFile(file);
shareIntent.putExtra(Intent.EXTRA_STREAM, uri);
shareIntent.setType("image/png");
startActivity(Intent.createChooser(shareIntent, getResources().getText(R.string.SHARE)));
}
上述代码中,首先创建一个分享意图shareIntent,然后检查图片文件是否存在。若存在,则通过chmod命令将图片文件的权限修改为644(即-rw-r--r--),以确保外部可以读取该文件。接着将图片文件的Uri添加到分享意图中,并设置分享类型为image/png,最后启动分享选择器。
Linux系统下的文件权限
一般情况下,Android系统下的每一个应用程序都是一个独立的用户,对应一个独立的组。一个文件的权限由3组3个二进制位表示。在权限表示中,-代表0,d、r、w、x都代表1。例如,rw-r--r--表示当前用户可读可写,用户所在组可读,其他用户可读,对应的十进制值为6 4 4。