EasyAR 开发技巧----截屏

来源:互联网 发布:数据架构师要学什么 编辑:程序博客网 时间:2024/06/05 16:20
截屏操作也是开发AR APP 常用的一个功能,与录屏功能一样,都是保留我们看到的精彩的AR瞬间以便于分享到朋友圈。这篇文章主要介绍3种常见的截屏方法供大家参考。
Step 1:开发准备
在 HelloAR 这个项目的基础上进行开发,我们在官网上下载unity的HelloAR案例导入unity中。

打开HelloARscene,填写好Key,然后我们布局UI,我们还用上次录屏功能的那张图片。布局框架如图:

我们建立一个空的"GameObject" ,整个布局如下图:

Step 2:第一种截屏方法
我们在新建的"GameObject" 下面新建一个脚本"GameCon".对于第一种实现截屏功能,我们使用unity 最传统也是最简单的方法:CaptureScreenshot()
public void Capture()    {        Application.CaptureScreenshot ("ScreenShot.png",0);    }

将该方法与Button 绑定,点击按钮后,将应用画面保存下来,图片名字为“ScreenShot.png”。它会直接保存在我们项目的文件夹里,电脑上可以轻松查看到,在移动端上(比如Android 平台),保存路径是:/sdcard/Android/data/你的app打包信息比如我的就是/sdcard/Android/data/com.mars.jieping:在files文件夹下就可以找到保存的图片,当然你也可以自定义保存路径。

PS:知道图片的路径特别重要,尤其是对后续分享功能的实现。



这种方法实现起来特别简单,仅仅一行代码就可以解决,但它的缺点也够明显,它默认的是全屏截屏,也就是你的UI层也会被保存下来,用户体验不是很好。

Step 3:截屏插件

第二种方法我们使用一种截屏插件:GalleryScreenshot这是一款流行的截屏插件,尤其是Android /ios 平台上的集成截屏功能特别友好,好多AR开发上都会用到它。


链接: https://pan.baidu.com/s/1mih0SQW 密码: 1csb

下载好后,导入到unity中.我们发现这里面最重要的脚本是"GalleryScreenshotExample.cs"。它是实现截屏的关键,原始脚本是通过OnGUI来实现的,我们简单修改下,让截屏的方法与我们的Button 绑定。


public void Capture()    {        StartCoroutine (ScreenshotManager.Save ("MyScreenshot", "MyApp", true));    }


在移动端测试后,会发现它会直接将我们的图片保存到相册里,非常方便,但缺点仍是全屏截图。
Step 4:较完美的截屏方法

前两种方法虽然代码实现比较简单,但是体验不会太好,第三种是一种比较好的截屏解决方案,将UI的camera 层提取出来,这样就可以保存我们ARCamera 所“看到的画面”。

我们在前面的那个脚本"GameCon" 继续实现。新建一个方法:
void CaptureCamera(Camera camera, Rect rect)     {                RenderTexture rt = new RenderTexture((int)rect.width, (int)rect.height, 0);        camera.targetTexture = rt;        camera.Render();        RenderTexture.active = rt;        Texture2D screenShot = new Texture2D((int)rect.width, (int)rect.height, TextureFormat.RGB24,false);        screenShot.ReadPixels(rect, 0, 0);        screenShot.Apply();        camera.targetTexture = null;        RenderTexture.active = null;         GameObject.Destroy(rt);        byte[] bytes = screenShot.EncodeToPNG();        string filename = Application.dataPath + "/Screenshot.png";        System.IO.File.WriteAllBytes(filename, bytes);    }

需要传入两个参数:
1.需要截屏的那个camera 层
2.屏幕大小

首先我们在开头定义一个Camera:
public Camera camera;

我们再建一个方法调用:
public void Capture2()    {        CaptureCamera (camera,new Rect( Screen.width*0f, Screen.height*0f, Screen.width*1f, Screen.height*1f));    }
然后在unity里将我们的ARCamera 赋值:

ps:参考--- http://blog.csdn.net/anyuanlzh/article/details/17008909
测试后,会发现我们的UI界面不见了,这样的体验是最好的。当然,截屏的方法不止这些,大家有什么好的解决方案可以在评论区留言!
我们用EasyAR 实现了在AR开发中最常见的两个功能:
录屏:EasyAR 初学者入门指南(5)---录屏功能
截屏:EasyAR 开发技巧----截屏
因此在后续的技术分享中我们将实现Share (分享到社交平台)的功能。
原创粉丝点击
热门问题 老师的惩罚 人脸识别 我在镇武司摸鱼那些年 重生之率土为王 我在大康的咸鱼生活 盘龙之生命进化 天生仙种 凡人之先天五行 春回大明朝 姑娘不必设防,我是瞎子 腰肌拉伤怎么办恢复快 过敏起大水泡了怎么办 身上长疱疹怎么办冶疗 刚怀孕长了疱疹怎么办 吃完饭恶心想吐怎么办 减肥药吃了心慌怎么办 吃多了恶心想吐怎么办 想吐怎么办最快最有效 想吐又吐不出来怎么办 3岁宝宝反胃呕吐怎么办 2岁宝宝反胃呕吐怎么办 突然恶心想吐是怎么办 孕4个月反胃呕吐怎么办 怀孕2月反应大怎么办 狗吐拉稀不吃饭怎么办 狗狗咳喘怎么办最有效 半永久纹眉失败怎么办 纹的眉毛太细了怎么办 眉毛颜色做深了怎么办 半永久眼线不掉怎么办 移植9天来月经怎么办 月经迟迟不来该怎么办 lol晋级赛输了怎么办 激素正常的多囊怎么办 右侧输卵管通而不畅怎么办 小该咳嗽老不好怎么办 孩子吓着了怎么办最快 2个月宝宝吓到了怎么办 3个月宝宝吓到了怎么办 宝宝吓着了发烧怎么办 好几个月不遗精怎么办 孕妇吃了黑橄榄怎么办 内膜4mm来月经了怎么办 吃了伟哥没效果怎么办 维a酸乳膏副作用怎么办 颈椎病引起的头晕恶心怎么办 经常头疼怎么办最快最有效 感昌了头晕乏力怎么办 来例假喝啤酒了怎么办 来月经喝啤酒了怎么办 吃的油腻长痘怎么办