从主摄像机并设置像素抓取图片

/*              #########                       
              ############                     
              #############                    
             ##  ###########                   
            ###  ###### #####                  
            ### #######   ####                 
           ###  ########## ####                
          ####  ########### ####               
         ####   ###########  #####             
        #####   ### ########   #####           
       #####   ###   ########   ######         
      ######   ###  ###########   ######       
     ######   #### ##############  ######      
    #######  #####################  ######     
    #######  ######################  ######    
   #######  ###### #################  ######   
   #######  ###### ###### #########   ######   
   #######    ##  ######   ######     ######   
   #######        ######    #####     #####    
    ######        #####     #####     ####     
     #####        ####      #####     ###      
      #####       ###        ###      #        
        ###       ###        ###              
         ##       ###        ###               
__________#_______####_______####______________
    身是菩提树,心如明镜台,时时勤拂拭,勿使惹尘埃。
                我们的未来没有BUG              
* ==============================================================================
* Filename: Instering
* Created:  2017/8/1
* Author:   WYC
* Purpose:  从主摄像机设置像素抓取图片
* ==============================================================================
*/
using UnityEngine;
using System;
using System.IO;
using UnityEngine.UI;
using UnityEngine.SceneManagement;
public class CaptureCamera : MonoBehaviour {
    public Camera camera1;
    public Rect rect;

    public void OnClick()
    {
        // 创建一个RenderTexture对象  
        RenderTexture rt = new RenderTexture((int)rect.width, (int)rect.height, 0);
        // 临时设置相关相机的targetTexture为rt, 并手动渲染相关相机  
        camera1.targetTexture = rt;
        camera1.Render();
        // 激活这个rt, 并从中中读取像素。  
        RenderTexture.active = rt;
        Texture2D screenShot = new Texture2D((int)rect.width, (int)rect.height, TextureFormat.RGB24, false);
        screenShot.ReadPixels(rect, 0, 0);// 注:这个时候,它是从RenderTexture.active中读取像素  
        screenShot.Apply();
        // 重置相关参数,以使用camera继续在屏幕上显示  
        camera1.targetTexture = null;
        RenderTexture.active = null; // JC: added to avoid errors  
        GameObject.Destroy(rt);
        // 最后将这些纹理数据,成一个png图片文件  
        DateTime now = DateTime.Now;
        string a = now.ToString();
        String[] b = a.Split('/');
        b[0] = b[0] + b[1] + b[2];
        String[] c = b[0].Split(':');
        c[0] = c[0] + c[1] + c[2];
        c[0] = "/" + c[0];
        c[0] += ".png";
        byte[] bytes = screenShot.EncodeToJPG();
        string filename = Application.persistentDataPath + c[0];
        File.WriteAllBytes(filename, bytes);
        Debug.Log(string.Format("截屏了一张照片: {0}", filename));
    }

}

 

posted @ 2017-11-10 14:36  一只默默奮鬥的程序菌  阅读(157)  评论(0编辑  收藏  举报