Cocos2d x 如何从RenderTexture Cocos2d JS获取byteArray或base64字符串
我正在facebook的cocos2d JS上制作一个游戏,其中需要分享游戏的截图 我可以拍摄截图,但现在我无法将其上传到Parse.com服务器,因为它需要base64格式或字节数组。我无法找到将Sprite转换为此格式的任何解决方案。。这是我的代码,所以当我添加孩子时,结果是正确的。。我还添加了我的注释代码,这将有助于理解我已经尝试了很多东西,但没有达到同样的效果Cocos2d x 如何从RenderTexture Cocos2d JS获取byteArray或base64字符串,cocos2d-x,cocos2d-x-3.0,cocos2d-js,Cocos2d X,Cocos2d X 3.0,Cocos2d Js,我正在facebook的cocos2d JS上制作一个游戏,其中需要分享游戏的截图 我可以拍摄截图,但现在我无法将其上传到Parse.com服务器,因为它需要base64格式或字节数组。我无法找到将Sprite转换为此格式的任何解决方案。。这是我的代码,所以当我添加孩子时,结果是正确的。。我还添加了我的注释代码,这将有助于理解我已经尝试了很多东西,但没有达到同样的效果 shareToSocialNetworking: function () { cc.director.setNextD
shareToSocialNetworking: function () {
cc.director.setNextDeltaTimeZero(true);
var newsize = cc.director.getVisibleSize();
var renderText = new cc.RenderTexture(newsize.width,newsize.height);
renderText.begin();
cc.director.getRunningScene().visit();
renderText.end();
var result = cc.Sprite.create(renderText.getSprite().getTexture());
result.flippedY = true;
this._mainViewNode.addChild(result,6000);
//renderText.saveToFile("screenshot.jpg",cc.IMAGE_FORMAT_PNG);
//var based = renderText.getSprite().getTexture().getStringForFormat().toString();
//var data = based.getData();
var file = new Parse.File("screen.jpg", { base64: this.getBase64(result) });
//var file = new Parse.File("screen.jpg", data, "image/png");
var self = this;
file.save().then(function() {
// The file has been saved to Parse.
alert(file.url);
this.onSharePictureInfoLink(file.url());
}, function(error) {
// The file either could not be read, or could not be saved to Parse.
});
//
//var ccImage = renderText.newCCImage();
//
//var str = ccImage.getData();
},
是否有任何解决方法有一个名为_cacheCanvas的私有变量,它是屏幕外画布的实例
您只需执行
renderText.\u cacheCanvas.toDataURL()
以下是如何从cocos2d JS获取screnshot
screenshot: function (fileName) {
var tex = new cc.RenderTexture(winSize.width, winSize.height, cc.Texture2D.PIXEL_FORMAT_RGBA8888);
tex.setPosition(cc.p(winSize.width / 2, winSize.height / 2));
tex.begin();
cc.director.getRunningScene().visit();
tex.end();
var imgPath = jsb.fileUtils.getWritablePath();
if (imgPath.length == 0) {
return;
}
var result = tex.saveToFile(fileName, cc.IMAGE_FORMAT_JPEG);
if (result) {
imgPath += fileName;
cc.log("save image:" + imgPath);
return imgPath;
}
return "";
}
然后从Javascript进行Java调用
public static void ScreenShot()
{
Bitmap imageBitmap = BitmapFactory.decodeFile(Cocos2dxHelper.getCocos2dxWritablePath() + "/" + "screenshot.png");
String fileHolder = "SampleFolder";
File filepathData = new File("/sdcard/" + fileHolder);
//~~~Create Dir
try {
if (!filepathData.exists())
{
filepathData.mkdirs();
filepathData.createNewFile();
FileWriter fw = new FileWriter(filepathData + fileHolder);
BufferedWriter out = new BufferedWriter(fw);
String toSave = String.valueOf(0);
out.write(toSave);
out.close();
}
}
catch (IOException e1) {
}
//~~~Create Image
File file = new File("/sdcard/" + "Your filename");
try
{
file.createNewFile();
FileOutputStream ostream = new FileOutputStream(file);
imageBitmap.compress(CompressFormat.PNG, 100, ostream);
ostream.close();
}
catch (Exception e) {}
Uri phototUri = Uri.fromFile(file);
Intent shareIntent = new Intent();
shareIntent.setAction(Intent.ACTION_SEND);
shareIntent.putExtra(Intent.EXTRA_STREAM, phototUri);
//~~~Add Code Below
}
不要忘记为外部存储添加权限有趣!这能跨平台工作吗?或者有没有其他方法可以在Android上运行的cocos2d js应用程序中捕获屏幕截图?这太糟糕了。。你知道用-js制作的本地应用截图吗?吴浩这是一个有趣的答案,我正在使用canvas.toDataUrl,虽然它也起作用,@Sebastiánvansteenkister:我会给你写一个答案,让你用-js制作的本地应用截图js@Sebasti我已经添加了一个答案,如果有人想要他们可以参考..你可以试试这个:-你可以试试这个:-