引用出处:
[1]http://blog.youkuaiyun.com/highning0007/article/details/37991787 Unity3d之截图方法
/*
*方法一,截取某一帧的整个游戏画面
*a.不能针对某一个相机(camera)的画面,进行截图。
*b.局部画面截图不方便,效率也低,不建议在项目中使用
*/
Application.CaptureScreenshot("screenShot.jpg", 0);
//方法二,全屏截图
//Rect:截图的区域,左下角为o点
//截全屏:
CaptureScreenshot2( new Rect( Screen.width*0f, Screen.height*0f, Screen.width*1f, Screen.height*1f));
//截中间,1/4:
CaptureScreenshot2( new Rect( Screen.width*0.25f, Screen.height*0.25f, Screen.width*0.5f, Screen.height*0.5f));
Texture2D CaptureScreenshot2(Rect rect)
{
// 先创建一个的空纹理,大小可根据实现需要来设置
Texture2D screenShot = new Texture2D((int)rect.width, (int)rect.height, TextureFormat.RGB24,false);
// 读取屏幕像素信息并存储为纹理数据,
screenShot.ReadPixels(rect, 0, 0,false);
screenShot.Apply();
// 将这些纹理数据组成一个png/JPG图片文件
//byte[] bytes = screenShot.EncodeToJPG();
byte[] bytes = screenShot.EncodeToPNG();
//string filename = Application.dataPath + "/Screenshot.jpg";
System.IO.File.WriteAllBytes(filename, bytes);
Debug.Log(string.Format("截屏: " + filename));
//返回Texture2d对象,可以用直接赋值给Texture2d类型的变量,方便且节省资源
return screenShot;
}
//方法三:截取某个相机渲染的画面
Texture2D CaptureCamera()
{
//创建一个RenderTexture对象
RenderTexture texture = new RenderTexture(Screen.width, Screen.height, 0);
//临时设置相关相机的targetTexture为RenderTexture的对象,并手动渲染相关相机
renderCamera.targetTexture = texture;
renderCamera.Render();
//激活RenderTexture对象,并从中读取像素
RenderTexture.active = texture;
screenShot = new Texture2D(Screen.width, Screen.height, TextureFormat.RGB24, false);
screenShot.ReadPixels(new Rect(0, 0, Screen.width, Screen.height), 0, 0);
screenShot.Apply();
//重置相关参数,以camera能继续在屏幕上显示
renderCamera.targetTexture = null;
RenderTexture.active = null;
Destroy(texture);
//将这些纹理数据转换为byte
byte[] bytes = screenShot.EncodeToJPG();
//将纹理数据组成JPG图片文件
string fileName = Application.dataPath + "/Screenshot.jpg";
return screenShot;
}