您好,登錄后才能下訂單哦!
快過新年了,一直在加班趕項目,沒時間寫博客,今天上班最后一天,就休息過年了,將我強幾天在做一個截圖功能分享出來,網上查了很多,但是都是在Unity Editor下好使,能截圖,并顯示出來,但是,在Android下,截圖成功,并能顯示出來,但是就是存不到手機相冊中,找了很多原因不知道怎么回事,查閱各種資料最終解決了。我總結了一下,我用過的方法,希望大家 能夠用的上。
第一種方法:
使用Application類下的CaptureScreenshot方法。但是我覺得這并不好用,不隨意。不能針對某一個相機(camera)的畫面,進行截圖。對局部畫面截圖,實現起來不方便,效率也低。
using System.Windows.Forms; //截圖保存在電腦C盤中,安卓的我沒想出用這中方法截圖怎么保存到手機 if (Input .GetMouseButtonDown (0)) { SaveFileDialog save = new SaveFileDialog(); save.InitialDirectory = "c:\\"; save.Filter = "Image Files(*.JPG;*.BMP;*.PNG)|*.JPG;*.BMP;*.PNG|All files (*.*)|*.*"; DialogResult result = save.ShowDialog(); if (result == DialogResult.OK) { string path = save.FileName; //EditorUtility.SaveFilePanel也可以實現保存,但是只能在Unity Editor下運行。 Application.CaptureScreenshot(path); } }
Android下, Application.CaptureScreenshot(); 截圖保存在沙河中,大家可以看一看 ,講的很清楚: http://jingpin.jikexueyuan.com/article/30470.html
第二種方法:采用的是new Texture2D來截取圖片分為截取一部分和全屏;
//截取一塊區域,通過鼠標點擊的點來獲取要截取的區域; using UnityEngine; using System.Collections; using System.IO; public class ShotScreenPicture : MonoBehaviour { Texture2D p_w_picpath; Texture2D cutImage; WWW www; Rect rect; float time; Vector2 pos1; Vector2 pos2; // Update is called once per frame void Update() { //點擊鼠標左鍵,記錄第一個位置 if (Input.GetMouseButtonDown(0)) { pos1 = Input.mousePosition; time = Time.time; if (time > 1f) { Debug.Log(pos1); } } //放開左鍵記錄第二個位置 if (Input.GetMouseButtonUp(0)) { pos2 = Input.mousePosition; Debug.Log(pos2); StartCoroutine(CutImage()); time = 0; } } void OnGUI() { //當下載完成 if (www.isDone) { GUI.DrawTexture(new Rect(0, 0, 600, 904), p_w_picpath); } GUI.Button(new Rect(0, 0, 100, 50), "W" + Screen.width + "H" + Screen.height); if (pos1 != null) { GUI.Button(new Rect(0, 50, 150, 50), pos1.ToString()); } if (pos2 != null) { GUI.Button(new Rect(0, 100, 150, 50), pos2.ToString()); } if (cutImage != null) { GUI.Button(new Rect(0, 150, 150, 50), "p_w_picpath W" + cutImage.width + "H" + cutImage.height); } if (rect != null) { GUI.Button(new Rect(0, 200, 250, 50), rect.ToString()); } } //截圖 IEnumerator CutImage() { //圖片大小 cutImage = new Texture2D((int)(pos2.x - pos1.x), (int)(pos1.y - pos2.y), TextureFormat.RGB24, true); //坐標左下角為0 rect = new Rect((int)pos1.x, Screen.height - (int)(Screen.height - pos2.y), (int)(pos2.x - pos1.x), (int)(pos1.y - pos2.y)); yield return new WaitForEndOfFrame(); cutImage.ReadPixels(rect, 0, 0, true); cutImage.Apply(); yield return cutImage; byte[] byt = cutImage.EncodeToPNG(); //保存截圖 //如果是Andriod平臺,可以把Application.streamingAssetsPath換成destination = "/sdcard/DCIM/Camera"; File.WriteAllBytes(Application.streamingAssetsPath + "/CutImage.png", byt); } }
//全屏截圖 //存儲路徑 private string Path_save; //讀取路徑 private string Path_read; private string filepath; private string destination; void Start() { filepath = Application.persistentDataPath + "/test.txt"; } public void OnClickShot() { StartCoroutine(getTexture2d()); } IEnumerator getTexture2d() { //隱藏UI ................................. //截圖操作 yield return new WaitForSeconds(0.1f); Texture2D t = new Texture2D(Screen.width, Screen.height, TextureFormat.RGB24, false); //顯示UI ....................... t.ReadPixels(new Rect(0, 0, Screen.width, Screen.height), 0, 0, true); byte[] bytes = t.EncodeToPNG(); t.Compress(true); t.Apply(); img.texture = t; //t就是截到的圖片我們可以在這里上傳到服務器 //下面是開始保存 //獲取系統時間 System.DateTime now = new System.DateTime(); now = System.DateTime.Now; string filename = string.Format("p_w_picpath{0}{1}{2}{3}.png", now.Day, now.Hour, now.Minute, now.Second); //記錄每一個截圖名字 StreamWriter sw; FileInfo ft = new FileInfo(filepath); la[1].text = filename; 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; //保存在Android相冊中,如果是PC就改成Application .dataPath 的路徑 destination = "/sdcard/DCIM/Camera"; if (!Directory.Exists(destination)) { Directory.CreateDirectory(destination); } destination = destination + "/" + filename; Path_save = destination; } //保存文件 File.WriteAllBytes(Path_save, bytes); }
第三種方法:有一個截圖插件,在附件即可下載;
snapShot.CaptureAndSaveToAlbum();
即可截圖成功,包含了選區域和全屏截圖。
【注意】第二種和第三種保存在Android下的手機相冊中,都要在發布的時候改成安卓默認路徑
最后再給一個調安卓截圖的功能(在搜索的時候看到的,覺得挺好的,分享給大家)
http://www.360doc.com/content/16/0128/23/21062130_531360104.shtml
http://www.ceeger.com/forum/read.php?tid=15252&page=1
免責聲明:本站發布的內容(圖片、視頻和文字)以原創、轉載和分享為主,文章觀點不代表本網站立場,如果涉及侵權請聯系站長郵箱:is@yisu.com進行舉報,并提供相關證據,一經查實,將立刻刪除涉嫌侵權內容。