这次带来的是关于unity3d里自写截图的,这个功能可以实现将当前屏幕画面保存为图片~
1.首先介绍一种 超级简单方法,调用U3D自带的api:
Application.CaptureScreenshot("jietu.png");
就这一句话,就能将当前屏幕所有内容保存为png格式的图片,图片的储存位置为当前工程的子目录下。
但是这种方法有一个很大的弊端,首先就是保存的是整个屏幕的内容,不可以实现区域截图,其次就是在效率上会有一些慢~
2.接下来介绍一个刚刚实现的可以随意选择截图区域,随意选择图片存放位置的方法~
这种方法相比第一种方法要麻烦一些,但是代码量也不是很多,只要大家可以花5分钟仔细看看就可以掌握了,因为运用的还是很基础的知识~
好了上代码:
void shot()
{
Texture2D temp = newTexture2D( width, height);
//新建一个texture2D用来临时存储我们的图片,width和height分别是图片的宽和高
temp.ReadPixels(new Rect(position_topLeft.x, position_topLeft.y,width, height)),0,0);
//为temp临时图片存入内容,就是读取屏幕上的内容,读取区域由第一个参数Rect决定, //截图区域任意性就在这里体现啦~不知道Rect的朋友我在下面讲一下
temp.Apply ();
byte[] bytes =temp.EncodeToPNG ();
//将temp临时图片的内容转换为byte数组存入临时数组bytes中
string filePath =Application.dataPath+"/123.png";
//这个是图片存储位置,存储位置任意性就在这里体现啦~
System.IO.FileStreams = new System.IO.FileStream (filePath, System.IO.FileMode.Create);
//新建一个文件流,存储路径设为我们刚刚设置的,用于下面的文件存储
//这个地方大家要注意下,调用了windows的dll所以在Unity里要设置以下,我会在下面说明
s.Write (bytes, 0,bytes.Length);
//将存有图片信息的byte数组写入通过文件流写入
s.Close();
Debug.Log("screenshot!");
}
相关说明:
1.Rect是表示一个矩形区域的一种变量,它的四个初始化参数分别代表:矩形区域左上点x坐标,矩形区域左上点y坐标,矩形区域宽度,矩形区域高度。
2.调用windows的dll需要设置如下:
Edit->projectsetting->player->other setting,
将选项:ApiCompatibility Level设为.NET 2.0
好了,咱们的截图功能完美实现啦,大家完全可想出各种各样的方法比如最简单的获取屏幕鼠标坐标,然后将相关参数传入代码头两行决定截图区域的参数里,想截哪就截哪~