Unity 截屏功能(安卓、IOS)
来源:互联网 发布:php简历真实 编辑:程序博客网 时间:2024/04/29 13:53
我们在一些项目中可能需要截图保存功能(特别是AR的一些项目),将截下来的图保存的相册中,从而实现分享功能。下面就Android和IOS说一下他们是如何将图片保存到本地图册的。
关于安卓端,保存到相册方法很简单,就是也路径的问题,具体方法如下:
public class takephoto : MonoBehaviour{ private int i = 0; //UI public GameObject[] btn; //存储路径 private string Path_save; //读取路径 private string Path_read; private string filepath; private string destination; void Start() { filepath = Application.persistentDataPath + "/test.txt"; } void OnClick() { StartCoroutine(getTexture2d()); } IEnumerator getTexture2d() { //隐藏UI for (int j = 0; j < btn.Length; j++) { btn[j].GetComponentInChildren<UISprite>().enabled = false; } //截图操作 yield return new WaitForEndOfFrame(); Texture2D t = new Texture2D(Screen.width, Screen.height,TextureFormat.RGB24,false); //显示UI for (int j = 0; j < btn.Length; j++) { btn[j].GetComponentInChildren<UISprite>().enabled = true; } t.ReadPixels(new Rect(0, 0, Screen.width, Screen.height), 0, 0, true); byte[] bytes = t.EncodeToPNG(); t.Compress(true); t.Apply(); //获取系统时间 System.DateTime now = new System.DateTime(); now = System.DateTime.Now; string filename = string.Format("image{0}{1}{2}{3}.png", now.Day, now.Hour, now.Minute, now.Second); //记录每一个截图名字 StreamWriter sw; FileInfo ft = new FileInfo(filepath); if (!ft.Exists) { sw = ft.CreateText(); } else { sw = ft.AppendText(); } sw.WriteLine(filename); sw.Close(); sw.Dispose(); //应用平台判断,路径选择 if (Application.platform == RuntimePlatform.Android) { string origin = Path_save; destination = "/mnt/sdcard/DCIM/ARphoto"; if (!Directory.Exists(destination)) { Directory.CreateDirectory(destination); } destination = destination + "/" + filename; Path_save = destination; } //保存文件 File.WriteAllBytes(Path_save, bytes); }}
其中主要的就是安卓相册的一个路径问题,我是在相册路径下,新建了一个名叫ARphoto相册,所有保存下来的图片都保存在这个相册中,可以再图库应用中查看到这个相册文件夹。
在IOS端保存相册是无法单独在Unity中完成的。需要调用Xcode中的方法,关于Unity与Xcode之间的交互有什么疑问的可以查看我之前写的 博文http://blog.csdn.net/hasion/article/details/43668229
其具体实现方法如下:
public class TakePhoto : MonoBehaviour{[DllImport("__Internal")]private static extern void _SavePhoto (string readaddr);private string path_save;private string path_read;public GameObject _demoBtns;void OnClick (){this.GetComponentInChildren<UITexture> ().enabled = false;_demoBtns.SetActive (false);System.DateTime now = System.DateTime.Now;string filename = string.Format ("image{0}{1}{2}{3}{4}{5}.png", now.Year, now.Month, now.Day, now.Hour, now.Minute, now.Second);path_save = filename;path_read = Application.persistentDataPath + "/" + path_save;//set photomanager.csif (!string.IsNullOrEmpty (path_save)) {PhotosManager.GetInstance ().PhotoPath = path_read;}StartCoroutine (SavePhoto ());}IEnumerator SavePhoto (){yield return new WaitForSeconds (0.2f);Application.CaptureScreenshot (path_save);yield return new WaitForSeconds (0.5f);this.GetComponentInChildren<UITexture> ().enabled = true;_demoBtns.SetActive (true);yield return new WaitForSeconds (1.2f);_SavePhoto (path_read);}}
Xcode中执行文件如下:
#import "PhotoManager.h"@implementation PhotoManager- ( void ) imageSaved: ( UIImage *) image didFinishSavingWithError:( NSError *)error contextInfo: ( void *) contextInfo{ if (error != nil) { NSLog(@"有错误"); } else { NSLog(@"保存结束"); }}void _SavePhoto(char *readAddr){ NSString *strReadAddr = [NSString stringWithUTF8String:readAddr]; UIImage *img = [UIImage imageWithContentsOfFile:strReadAddr]; NSLog(@"%@",[NSString stringWithFormat:@"w:%f, h:%f", img.size.width, img.size.height]); NSLog(@"%@",[NSString stringWithFormat:@"%s",readAddr ]); PhotoManager *instance = [PhotoManager alloc]; UIImageWriteToSavedPhotosAlbum(img, instance, @selector(imageSaved:didFinishSavingWithError:contextInfo:), nil);}@end
大体执行流程就是这样的,有什么错误或者建议的地方,欢迎大家指正,谢谢!!!
0 0
- Unity 截屏功能(安卓、IOS)
- 201711231640->unity调用安卓震动功能
- 【Unity】安卓/ios应用名本地化
- 【Unity】安卓/ios应用名本地化
- 实现安卓程序退出后重进自己程序的一个小功能(android,unity)
- unity 如何实现安卓Android的toast功能
- 安卓 实现防止截屏功能
- unity安卓和IOS的本地消息推送
- Unity安卓打包
- Unity安卓交互
- Unity真机调试:查看安卓和ios的Profile(内含安卓,ios打包教程)
- Unity实现类似于安卓原生项目的点击安卓返回按钮回到前一页的功能
- [Unity][安卓]Unity和Android Studio 3.0 交互通讯(2)Unity 设置
- Unity接入友盟SDK后,添加打开安卓APP的功能 遇到的问题
- [Unity][安卓]Unity Android SDK配置
- 【IOS】截屏功能
- IOS截屏功能
- iOS截屏功能
- MyEclipse快捷键大全(绝对全)
- 扩展框架分析
- url
- 使用NFS挂载根文件系统到2440开发板
- PHP结合memcacheq消息队列解决并发问题
- Unity 截屏功能(安卓、IOS)
- Java笔试面试题整理第五波
- 【Hibernate】初入门上手实例
- CentOS6.4编译安装iftop监控网卡流量
- 1015. Reversible Primes (20)
- c++开发中常见bug总结(不定期更新)
- LCD的接口类型详解,及接口的转换方案
- 每天一个 Linux 命令(39):grep 命令
- Java Tomcat SSL 服务端/客户端双向认证のApache HttpClient(二)