cocos creator 手机截屏

cocos creator 手机截屏分享二维码 完整写法。小子虽然不才但也讨厌很多人 直接复制别人的博客粘贴到自己上面还不补全。说多了就是泪啊!不说多了上代码。加班写出来的没有优化谅解哈。

1.这里是手机截屏功能

// Learn cc.Class:
//  - [Chinese] https://docs.cocos.com/creator/manual/zh/scripting/class.html
//  - [English] http://docs.cocos2d-x.org/creator/manual/en/scripting/class.html
// Learn Attribute:
//  - [Chinese] https://docs.cocos.com/creator/manual/zh/scripting/reference/attributes.html
//  - [English] http://docs.cocos2d-x.org/creator/manual/en/scripting/reference/attributes.html
// Learn life-cycle callbacks:
//  - [Chinese] https://docs.cocos.com/creator/manual/zh/scripting/life-cycle-callbacks.html
//  - [English] https://www.cocos2d-x.org/docs/creator/manual/en/scripting/life-cycle-callbacks.htmlcc.Class({extends: cc.Component,properties: {// foo: {//     // ATTRIBUTES://     default: null,        // The default value will be used only when the component attaching//                           // to a node for the first time//     type: cc.SpriteFrame, // optional, default is typeof default//     serializable: true,   // optional, default is true// },// bar: {//     get () {//         return this._bar;//     },//     set (value) {//         this._bar = value;//     }// },_canvas: null,targetNode: cc.Node,camera: cc.Camera},// LIFE-CYCLE CALLBACKS:onLoad() {this.init();},init() {let texture = new cc.RenderTexture();texture.initWithSize(this.targetNode.width, this.targetNode.height, cc.gfx.RB_FMT_S8);this.camera = this.node.addComponent(cc.Camera);this.camera.targetTexture = texture;this.texture = texture;},start() {if (CC_JSB && cc.sys.isNative) {this.camera.enabled = true;this.scheduleOnce(() => {let picData = this.createCaptImage();let name = "LMJL-" + Date.now() + ".png";let filePath = jsb.fileUtils.getWritablePath() + name;//'render_to_sprite_image.png';let success = jsb.saveImageData(picData, this.texture.width, this.texture.height, filePath)if (success) {// var ok = false;// if(cc.sys.platform == cc.sys.OS_IOS){//     ok = cc.vv.GLSDKMgr.savePic(picData, name);// }else{// }var ok = cc.vv.GLSDKMgr.savePic(filePath, name);if (ok) cc.vv.GLUtils.showTips("保存完毕");console.log("save image data success, file: " + filePath);}else {console.log("save image data failed!");}this.camera.enabled = false;this.node.removeFromParent();}, 0.5);} else {// h5this.createCanvas();var dataURL = this._canvas.toDataURL("image/png");var img = document.createElement("img");img.src = dataURL;//保存图片this.scheduleOnce(() => {var dataURL = this._canvas.toDataURL("image/png")var a = document.createElement("a")a.href = dataURL;a.download = "image";document.body.appendChild(a);a.click();document.body.removeChild(a);this.node.removeFromParent();}, 0.5);}},// 手机createCaptImage() {let data = this.texture.readPixels();let width = this.texture.width;let height = this.texture.height;let picData = new Uint8Array(width * height * 4);let rowBytes = width * 4;for (let row = 0; row < height; row++) {let srow = height - 1 - row;let start = srow * width * 4;let reStart = row * width * 4;// save the piexls datafor (let i = 0; i < rowBytes; i++) {picData[reStart + i] = data[start + i];}}return picData;},// create the canvas and context, filpY the image DatacreateCanvas() {let width = this.texture.width;let height = this.texture.height;if (!this._canvas) {this._canvas = document.createElement('canvas');this._canvas.width = width;this._canvas.height = height;}else {this.clearCanvas();}let ctx = this._canvas.getContext('2d');this.camera.render();let data = this.texture.readPixels();// write the render datalet rowBytes = width * 4;for (let row = 0; row < height; row++) {let srow = height - 1 - row;let imageData = ctx.createImageData(width, 1);let start = srow * width * 4;for (let i = 0; i < rowBytes; i++) {imageData.data[i] = data[start + i];}ctx.putImageData(imageData, 0, row);}return this._canvas;},// create the img elementinitImage() {// return the type and dataUrlvar dataURL = this._canvas.toDataURL("image/png");var img = document.createElement("img");img.src = dataURL;return img;},// create the canvas and context, filpY the image DatacreateSprite() {let width = this.texture.width;let height = this.texture.height;if (!this._canvas) {this._canvas = document.createElement('canvas');this._canvas.width = width;this._canvas.height = height;} else {this.clearCanvas();}let ctx = this._canvas.getContext('2d');this.camera.render();let data = this.texture.readPixels();// write the render datalet rowBytes = width * 4;for (let row = 0; row < height; row++) {let srow = height - 1 - row;let imageData = ctx.createImageData(width, 1);let start = srow * width * 4;for (let i = 0; i < rowBytes; i++) {imageData.data[i] = data[start + i];}ctx.putImageData(imageData, 0, row);}return this._canvas;},getTargetArea() {let targetPos = this.targetNode.convertToWorldSpaceAR(cc.v2(0, 0))let y = cc.winSize.height - targetPos.y - this.targetNode.height / 2;let x = cc.winSize.width - targetPos.x - this.targetNode.width / 2;return {x,y}},clearCanvas() {let ctx = this._canvas.getContext('2d');ctx.clearRect(0, 0, this._canvas.width, this._canvas.height);}// update (dt) {},
});

2、这里是属于js调oc 与js调android

     savePic: function (path_file, name) {if (cc.sys.os == cc.sys.OS_ANDROID) {// var funName = this.setCallBack(cc.vv.GLSDKMgr.wechatLoginCallback, "SavePicCallback");var ret = jsb.reflection.callStaticMethod(this.NATIVE_HELPER, "saveImageToGallery", this.ONE_STRING_TOW_STRING_PARAMS, path_file, name);if (ret == "success") {return true;}} else if (cc.sys.os == cc.sys.OS_IOS) {var ret = jsb.reflection.callStaticMethod("NativeHelper", "saveImageToGallery:", path_file);if (ret=="success") {return true;}}return false;},提示:注意js调oc jsb.reflection.callStaticMethod("NativeHelper", "saveImageToGallery:", path_file);传入参数记得一定要在方法名后面加冒号"saveImageToGallery:"不然会出现找不到xxx方法

 

3、object-c 的中首先得添加相机权限与提示用的是否开启相机访问相册权限

    <key>NSPhotoLibraryUsageDescription</key>
    <string>此App需要您的同意才能读取媒体资料库</string>
    <key>NSPhotoLibraryAddUsageDescription</key>
    <string>是否允许此APP保存图片到相册?</string>

添加这两句话到

xml文件中

配置相机调用的库文件

 

这两个库文件加入入上图所示中

 

好了到了这里你就完成了3/4了
现在来上oc代码

.h中
+ (NSString*) saveImageToGallery:(nonnull NSString*)imgpath;#import <Photos/Photos.h>
#import <AssetsLibrary/AssetsLibrary.h>.mm文件中的实现+ (NSString*) saveImageToGallery:(NSString*)imgpath{
//    NSArray *imageArray = [imgData componentsSeparatedByString:@","];
//    NSData *imageData = [[NSData alloc] initWithBase64EncodedString:imageArray[1] options:NSDataBase64DecodingIgnoreUnknownCharacters];
//
//    UIImage *image = [UIImage imageWithData:imageData];// 同步执行修改操作NSError *error = nil;__block NSString *assetId = nil;NSURL *url = [NSURL fileURLWithPath:imgpath];ALAuthorizationStatus author = [ALAssetsLibrary authorizationStatus];if (author ==ALAuthorizationStatusRestricted || author ==ALAuthorizationStatusDenied){//无权限 引导去开启NSURL *url = [NSURL URLWithString:UIApplicationOpenSettingsURLString];if ([[UIApplication sharedApplication] canOpenURL:url]) {[[UIApplication sharedApplication] openURL:url];}}else{// 1. 存储图片到"相机胶卷"[[PHPhotoLibrary sharedPhotoLibrary] performChanges:^{// 新建一个PHAssetCreationRequest对象, 保存图片到"相机胶卷"// 返回PHAsset(图片)的字符串标识PHAssetChangeRequest *createAssetRequest = [PHAssetChangeRequest creationRequestForAssetFromImageAtFileURL:url];assetId = createAssetRequest.placeholderForCreatedAsset.localIdentifier;} completionHandler:^(BOOL success, NSError * _Nullable error) {if (error) {NSLog(@"保存图片到相机胶卷中失败");}else{NSLog(@"成功保存图片到相机胶卷中");}}];return @"success";}//    [[PHPhotoLibrary sharedPhotoLibrary] performChanges:^{
//         //写入图片到相册
//         PHAssetChangeRequest *req = [PHAssetChangeRequest creationRequestForAssetFromImage:image];
//     } completionHandler:^(BOOL success, NSError * _Nullable error) {
//         NSLog(@"success = %d, error = %@", success, error);
//
//    }];//    UIImageWriteToSavedPhotosAlbum(image, nil, nil, nil);
}

以上内容完整基本就是复制粘贴能用 ,不同地方直接根据自己写法修改

 

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://xiahunao.cn/news/252848.html

如若内容造成侵权/违法违规/事实不符,请联系瞎胡闹网进行投诉反馈,一经查实,立即删除!

相关文章

android三星s8底部菜单,【Android】三星Galaxy S8及S8+的屏幕适配

一、前言 Galaxy S8及S8分别搭载“5.8”与“6.2”大屏&#xff0c;高达84%的屏幕占比为Galaxy S8及S8在游戏娱乐、观看视频时带来深度沉浸式视觉体验。但是与此同时S8却有着一个奇葩的屏幕比例&#xff1a;18.5比9&#xff0c;屏幕分辨率&#xff1a;29601440。通常我们在开发过…

三星s8android8.0,三星S8国行升级安卓8.0 系统流畅度提升

原标题&#xff1a;三星S8国行升级安卓8.0 系统流畅度提升 【手机中国 新闻】今天&#xff0c;三星正式为S8国行版用户开启“amsung Experience 9.0 Beta(安卓8.0)”抢先体验活动。用户可以通过三星应用商店下载“盖乐世”APP&#xff0c;并点击盖乐世空间公告栏里的“加入盖乐…

三星s8 android9.0官方rom,三星s8刷机包(最新固件升级V9.0)

三星s8搭载10nm制程的骁龙835和Exynos 8895处理器,有5.8英寸和6.2英寸两个版本。全网通、指纹识别、双频WIFI、高通骁龙、GPS导航,新版本已经可以进行下载体验,这个系统升级包主要是对系统功能进行性能调整,清新流畅,运行稳定,有需要的,可以进行下载了。 刷机有风险,操…

itchat群机器人的自动画实现

总体功能或思想 1、根据 itchat文档 实现简单的聊天回复功能 2、添加敏感词汇过滤、添加一些日常对话的回答 3、获取群成员信息&#xff0c;收到消息后&#xff0c;如果是女同胞发言&#xff0c;则给出提示 4、接入图灵机器人&#xff0c;提升日常会话能力 … 软件安装&#xf…

Python(二十)itchat模块

一、相关概念 itchat &#xff1a;一个开源的微信个人号接口(唯一微信没有查封的)&#xff0c;可以实现信息收发、获取好友列表等功能&#xff01; 二、安装包的相关问题 安装包失败 原因&#xff1a;由于是在虚拟环境进行ssl的模块和python的编译安装&#xff0c;所以移植到…

itchat自动回复

最近打算换新手机——>诺基亚 但是考虑到微信会有人发送消息给我&#xff0c;所以还是得写个脚本自动回复一下别人 所以就有了下面这个脚本&#xff0c;自己的文件助手是控制端&#xff0c;发送on开启回复功能&#xff0c;发送off关闭回复功能 当朋友发微信给你的时候&…

python itchat库_用python【itchat】库获取群聊信息的正确姿势

我在《昆明单车骑行群体分析报告&#xff08;2019版&#xff09;》中曾用python的itchat模块抓取了我加入的昆明单车群信息&#xff0c;并做了简要分析。 在持续十来天抓取群数据的时候&#xff0c;我发现一个奇怪现象&#xff0c;就是有一个群神出鬼没&#xff0c;有时候能抓…

灵魂发问

序言 谬论之所以是谬论&#xff0c;因为是没有实际产生作用&#xff0c;每天挂在嘴边的&#xff0c;啊&#xff0c;我要减肥&#xff0c;骗鬼呢&#xff0c;鬼才信。。。灵魂已经枯萎。 学了那么多&#xff0c;记住了几个&#xff1f;认识那么多人&#xff0c;能认识多久&#…

崩坏3服务器维护多久,崩坏35月28日停服维护多久?4.0版本更新内容汇总[图]

崩坏3早已放出消息的4.0版本终于要来了&#xff0c;官方已经发布了更新的公告&#xff0c;将会在5月28日的时候停服&#xff0c;到时候玩家就不能登游戏了&#xff0c;那么本次更新的具体时间是什么时候&#xff1f;还有要持续多久&#xff1f;又有什么新的内容上线&#xff1f…

我的灵魂在哪里?

点击↑上方↑蓝色“编了个程”关注我~ 这是Yasin的第 81 篇原创文章 写在前面 很长一段时间以来&#xff0c;我的脑子里都会偶尔冒出一些问题&#xff1a;我是谁&#xff1f;这个世界是怎么构成的&#xff1f;是真实的吗&#xff1f;上帝存在吗&#xff1f;我为什么会有某某想法…

微信怎么传较大视频?微信怎么传特别大的视频?

微信怎么传较大视频&#xff1f;微信怎么传特别大的视频视频是我们在生活中不可或缺的一部分&#xff0c;随着制作视频的小伙伴越来越多&#xff0c;大家都想把制作好的视频上传到一些平台或传给别人&#xff0c;有时候我们会遇到视频内存过大的问题&#xff0c;今天我给大家介…

视频文件太大怎么发微信朋友?微信怎么发超大或过大的视频文件?

视频文件太大怎么发微信朋友&#xff1f;经常有朋友问我视频太大了怎么压缩&#xff0c;我也找了很多软件&#xff0c;但是都不怎么样好用&#xff0c;小编今天给小伙伴们介绍一个简单的方法视频压缩软件&#xff0c;我在这里介绍一个简单的方法来压缩视频体积&#xff1a; 搜索…

微信传送文件会经过服务器吗,微信可以传送大文件了

今天下午&#xff0c;腾讯微信团队宣布微信现已支持向朋友发送高清视频和图片&#xff0c;且不会被压缩&#xff0c;不过有几点注意事项。目前仅支持最大的文件不能超过200M&#xff0c;不像QQ那样可以支持上G的文件传输。暂未向安卓用户开放&#xff0c;仅在IOS系统上线&#…

微信QQ互传文件

一、QQ传到微信 QQ文件传到微信就比较麻烦了&#xff0c;不过我会详细步骤教大家如何操作的。 操作详解&#xff1a; 第一步&#xff1a;打开桌面上的文件管理&#xff0c;进入后&#xff0c;点击内部储存。 示例图 第二步&#xff1a;点击右上角的放大镜按钮&#xff0c;搜…

小程序上传大文件

目的 小程序 API wx.uploadFile 最大上传文件10M&#xff0c;如果需要上传大于 10M 文件&#xff0c;需要分片上传。 可以利用小程序组件 miniprogram-file-uploader 上传&#xff1b; 步骤 引入组件 进入小程序根目录&#xff0c;运行&#xff1a; npm init npm i miniprogr…

微信视频文件过大,无法传输?教你一招快速压缩文件!

我们都知道微信之间可以进行文件传输&#xff0c;但是有一定的限制&#xff0c;那就是文件需要在30M之内才可以&#xff0c;文件大小超过这个数值是不可以的&#xff0c;那么微信中的视频文件该如何传输呢&#xff1f;教你一招&#xff0c;快速解决&#xff01; 一般来说&…

微信和QQ如何互传文件?其实方法很简单,手把手教你操作

工作中经常需要互传文件&#xff0c;而经常使用的工具就是微信和QQ。按方便快捷来说&#xff0c;肯定QQ互传文件要好一些。不过在工作中&#xff0c;一般都是加微信好友&#xff0c;QQ则是比较私人的&#xff0c;但是QQ处理文件更加方便&#xff1f;那微信和QQ如何互传文件呢&a…

微信文件过大不能上传?学会这几种方法,再大文件也能轻松发

微信文件过大不能上传&#xff1f;学会这几种方法&#xff0c;再大文件也能轻松发 微信已经逐渐成为办公必须&#xff0c;但微信不支持大文件的发送&#xff0c;那么遇到这种情况&#xff0c;很多小伙伴都会选择用QQ&#xff0c;其实微信也能发送大文件&#xff0c;只要方法用…

怎么远程传输大文件?

在日常工作中&#xff0c;我们常常会遇到将电脑的文件&#xff0c;特别是大文件资料进行传输&#xff0c;比如设计稿件&#xff0c;软件开发包&#xff0c;视频素材等等大文件资料进行传输发送。虽然网络通信技术不断发展&#xff0c;对大数据量&#xff0c;高频次&#xff0c;…

电脑与电脑之间快速传输大文件的方法

概览&#xff1a;传输大型文件 多数人是通过U盘或其他储存设备在计算机之间传输文件&#xff08;象是转移一些500MB或700MB大小图片&#xff09;。说实话&#xff0c;如果是传输小文件确实是很好用的办法&#xff1b;但如果今天要转移的是大文件&#xff08;尤其那些占用大量磁…