怎么用红米2使用说明书 screen shot?

原创科技评测
51个视频,总播放:404735
扫描二维码随身看视频
用手机或平板摄像头拍下右侧的二维码,您可以:
1 在手机或平板上继续观看该视频
2 分享给你的微信好友或者朋友圈
404735次播放
好莱坞影院推荐
赌神发哥重出江湖
全球最萌小黄人来了!
下载手机APP随时随地,快速访问
只要手机在手,您都可以快速、方便地看贴发帖,与论坛好友收发短消息。
极致优化,畅快"悦"读
独有的论坛界面和触屏设计,手机论坛也变得赏心悦目,操作自如。
即拍即发,分享生活
不管是风景图画,还是新闻现场,拍照发帖一气呵成,让您在论坛出尽风头。
下载客户端后,拍摄二维码快速访问本站:
或者通过以下地址访问:
Copyright &
深圳信壹网络有限公司.版权所有1.2.1 CaptureScreenshot方法:截屏
本文所属图书&>&
本书挑选了Unity 引擎里一些核心API 类,例如 Object、GameObject、Rigidbody、Transform、Camera、Quaternion、Vector3 等进行了详细的功能注解,注解内容包括API 的使用方法、算法分析、边界条件、参数间&&
1.2 Application类静态方法
在Application类中,涉及的静态方法有CaptureScreenshot方法、LoadLevelAdditiveAsync方法和RegisterLogCallback方法,下面详细介绍这些方法。
1.2.1 CaptureScreenshot方法:截屏
基本语法(1) public static void CaptureScreenshot(string filename);
(2) public static void CaptureScreenshot(string filename, int superSize);
其中参数filename为截屏文件名称,superSize为放大系数,默认为0,即不放大。
功能说明此方法用于截取当前游戏画面并将截取的图片保存为PNG格式。截屏后文件会默认保存在根目录下,如果根目录下已存在同名文件,将会被替换。当superSize大于1时,截屏文件的宽度和高度将同时被放大superSize倍。
此方法在Web模式下无效。
当放大系数小于0时,按默认值0处理,即图片不放大也不缩小。
实例演示下面通过实例演示如何使用CaptureScreenshot方法来截屏。
using UnityE
using System.C
public class CaptureScreenshot_ts : MonoBehaviour
&&& int tp = -1;
&&& void Update()
&&&&&&& if (tp == 0)
&&&&&&&&&&& //默认值,不放大
&&&&&&&&&&& Application.CaptureScreenshot(&test01.png&, 0);
&&&&&&& else if (tp == 1)
&&&&&&&&&&& //放大系数为1,即不放大
&&&&&&&&&&& Application.CaptureScreenshot(&test02.png&, 1);
&&&&&&& else
&&&&&&&&&&& //放大系数为2,即放大2倍
&&&&&&&&&&& Application.CaptureScreenshot(&test03.png&, 2);
&&&&&&& tp++;
在这段代码中,首先声明了一个int类型的变量tp,然后在Update方法中根据不同的变量值生成了3张不同放大系数的PNG图片。请自行运行程序,在程序根目录下查看生成的PNG文件的大小。由于CaptureScreenshot方法在每帧中只执行一次,所以如果使用如下代码的话,只会生成一张PNG图片,即test03.png:
using UnityE
using System.C
public class CaptureScreenshot_ts : MonoBehaviour
&&& void Update() {
&&&&&&& Application.CaptureScreenshot(&test01.png&, 0);
&&&&&&& Application.CaptureScreenshot(&test02.png&, 1);
&&&&&&& Application.CaptureScreenshot(&test03.png&, 2);
在Update方法中,依次调用了3次CaptureScreenshot方法,试图生成3个不同放大的图片,但是在同一帧中,只有最后一次调用才能生效,故此段程序的运行结果只能生成一张PNG图片,即test03.png。
由于CaptureScreenshot方法可以实时截取程序屏幕,因此可以用其截图所包含的信息做一些有趣的应用,下面是一个小例子。
在本例中,玩家可以在程序左上角的TextField输入框里输入几个文字(最多不要超过输入框的最大宽度),单击&确定&按钮便会看到很多小球组成了文字的形状分布在三维空间中。图1-3是程序启动后的截图,图1-4是单击&确定&后的截图,图1-5是在文本框中输入&霞光满天&四个字后显示的形状。
本例中用到的脚本有Capture_Use_ts.cs和Capture_Use_Sub_ts.cs,其中脚本Capture_Use_Sub_ts.cs用来控制每个小球的位置,其代码如下。
using UnityE
using System.C
public class Capture_Use_Sub_ts : MonoBehaviour
&&& //物体移动的目标位置
&&& public Vector3
&&& //物体移动时间
&&& void Start()
&&&&&&& //获取一个随机值
&&&&&&& delays = Random.Range(2.0f, 4.0f);
&&& void Update()
&&&&&&& //通过更改物体位置来达到物体运动的效果
&&&&&&& transform.position = Vector3.MoveTowards(transform.position, toward, delays);
在这个脚本中,首先声明了一个公共变量toward,以便在主脚本Capture_Use_ts.cs中调用,然后给另一个变量delays赋予了一个随机值,以便每个小球的运动显得更加真实。具体每行代码的作用已作了注释,不再赘述。
下面是主脚本Capture_Use_ts.cs中的代码。
using UnityE
using System.C
public class Capture_Use_ts : MonoBehaviour
&&& //td:用来指向屏幕截图
&&& Texture2D td =
&&& //txt_bg:用来指向文本输入的背景图片
&&& //可以指向一张纯色的图片,也可以自定义一个纯色的背景
&&& //本程序自定义了一个纯色的背景
&&& Texture2D txt_
&&& //txt_w和txt_h用来记录文本框的宽度和高度
&&& int txt_w, txt_h;
&&& //my_save_path:用来记录截图的保存路径
&&& string my_save_path = &&;
&&& //show_txt:用来记录输入的文本
&&& string show_txt = &在此输入&;
&&& //my_colors:用来记录文本输入框的纹理颜色
&&& Color[] my_
&&& //_w和_h用来记录my_colors的宽度和高度
&&& int _w, _h;
&&& //step:用来记录当前状态,step共有4种状态:
&&& //step=0时,是等待状态,等待在文本框中输入文本
&&& //step=1时,即点击&确定&按钮后,生成截图并保存
&&& //step=2时,读取截图信息
&&& //step=3时,是对读取的截图信息进行有选择的提取,并生成想要展示的内容
&&& int step = 0;
&&& //go:用来指向拼字所用物体对象
&&& public GameO
&&& //gos:用来记录所有的go对象
&&& GameObject[]
&&& //gos_max用来记录gos的最大容量
&&& int gos_
&&& //gos_cur用来记录gos当前使用值
&&& int gos_cur = 0;
&&& //is_show:用来记录图像矩阵中某个点是否需要展示物体
&&& bool[,] is_
&&& void Start()
&&&&&&& //初始化文本框的宽度和高度
&&&&&&& txt_w = 200;
&&&&&&& txt_h = 80;
&&&&&&& //初始化截取区间的大小,为了避免边界识别错误,其值应该比文本框的宽度和高度少几个像素
&&&&&&& _w = txt_w;
&&&&&&& _h = txt_h;
&&&&&&& _w -= 5;
&&&&&&& _h -= 5;
&&&&&&& //自定义txt_bg纹理
&&&&&&& txt_bg = new Texture2D(txt_w, txt_h);
&&&&&&& Color[] tdc = new Color[txt_w * txt_h];
&&&&&&& for (int i = 0; i & txt_w * txt_h; i++)
&&&&&&&&&&& //所用像素点颜色应相同
&&&&&&&&&&& tdc[i] = Color.
&&&&&&& txt_bg.SetPixels(0, 0, txt_w, txt_h, tdc);
&&&&&&& is_show = new bool[_h, _w];
&&&&&&& //初始化gos_max,其值大小为_w * _h的三分之一在一般情况下就够用了
&&&&&&& gos_max = _w * _h / 3;
&&&&&&& //实例化gos,使其随机分布_w和_h的区间内
&&&&&&& gos = new GameObject[gos_max];
&&&&&&& for (int i = 0; i & gos_ i++)
&&&&&&&&&&& gos[i] = (GameObject)Instantiate(go, new Vector3(Random.value * _w, Random.value *
&&&&&&&&&&&&&& h, 10.0f), Quaternion.identity);
&&&&&&&&&&& gos[i].GetComponent&Capture_Use_Sub_ts&().toward = gos[i].transform.
&&&&&&& //存储初始界面截图
&&&&&&& my_save_path = Application.persistentDataP
&&&&&&& Application.CaptureScreenshot(my_save_path + &/ts02.png&);
&&& void Update()
&&&&&&& switch (step)
&&&&&&&&&&& case 0:
&&&&&&&&&&&&&&&
&&&&&&&&&&& case 1:
&&&&&&&&&&&&&&& step = 0;
&&&&&&&&&&&&&&& //截图并保存
&&&&&&&&&&&&&&& my_save_path = Application.persistentDataP
&&&&&&&&&&&&&&& Application.CaptureScreenshot(my_save_path + &/ts02.png&);
&&&&&&&&&&&&&&& //给电脑一点儿时间用来保存新截取的图片
&&&&&&&&&&&&&&& Invoke(&My_WaitForSeconds&, 0.4f);
&&&&&&&&&&&&&&& Debug.Log(my_save_path);
&&&&&&&&&&&&&&&
&&&&&&&&&&& case 2:
&&&&&&&&&&&&&&& //由于在读取截图纹理的时候,一帧之内可能无法读完
&&&&&&&&&&&&&&& //所以需要step=0,避免逻辑出现混乱
&&&&&&&&&&&&&&& step = 0;
&&&&&&&&&&&&&&& //读取截图信息
&&&&&&&&&&&&&&& my_save_path = Application.persistentDataP
&&&&&&&&&&&&&&& StartCoroutine(WaitLoad(my_save_path + &/ts02.png&));
&&&&&&&&&&&&&&&
&&&&&&&&&&& case 3:
&&&&&&&&&&&&&&& //在计算并生成展示信息的时候,一帧之内可能无法完成
&&&&&&&&&&&&&&& //所以需要step=0,避免逻辑出现混乱
&&&&&&&&&&&&&&& step = 0;
&&&&&&&&&&&&&&& //计算并生成展示信息
&&&&&&&&&&&&&&& Cum();
&&&&&&&&&&&&&&&
&&& //计算并生成展示信息
&&& void Cum()
&&&&&&& if (td != null)
&&&&&&&&&&&
&&&&&&&&&&& //ft:用来记录文本框左下角像素的R通道值,用来作为后面的参照
&&&&&&&&&&& ft = td.GetPixel(2, td.height - _h).r;
&&&&&&&&&&& //截取文本框纹理信息
&&&&&&&&&&& //需要注意的是,纹理坐标系和GUI坐标系不同
&&&&&&&&&&& //纹理坐标系以左下角为原点,而GUI坐标系以左上角为原点
&&&&&&&&&&& //以2为x方向起点是为了避免截图边缘的痕迹
&&&&&&&&&&& my_colors = td.GetPixels(2, td.height - _h, _w, _h);
&&&&&&&&&&& int l = my_colors.L
&&&&&&&&&&& Debug.Log(&length: & + l);
&&&&&&&&&&& //通过遍历my_colors的R值,将其与ft比较来确定是否需要展示物体
&&&&&&&&&&& for (int i = 0; i & i++)
&&&&&&&&&&& {
&&&&&&&&&&&&&&& is_show[i / _w, i % _w] = my_colors[i].r == ft ? false :
&&&&&&&&&&& }
&&&&&&&&&&& //根据is_show的值排列gos中物体的位置
&&&&&&&&&&& for (int i = 0; i & _h; i++)
&&&&&&&&&&& {
&&&&&&&&&&&&&&& for (int j = 0; j & _w; j++)
&&&&&&&&&&&&&&& {
&&&&&&&&&&&&&&&&&&& if (is_show[i, j])
&&&&&&&&&&&&&&&&&&& {
&&&&&&&&&&&&&&&&&&&&&&& if (gos_cur & gos_max)
&&&&&&&&&&&&&&&&&&&&&&& {
&&&&&&&&&&&&&&&&&&&&&&&&&&& gos[gos_cur].GetComponent&Capture_Use_Sub_ts&().toward = new
&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&& Vector3(j, i, 0.0f);
&&&&&&&&&&&&&&&&&&&&&&&&&&& gos[gos_cur].SetActive(true);
&&&&&&&&&&&&&&&&&&&&&&&&&&& gos_cur++;
&&&&&&&&&&&&&&&&&&&&&&& }
&&&&&&&&&&&&&&&&&&&&&&& //当前gos数量不够用时需要扩充gos的容量
&&&&&&&&&&&&&&&&&&&&&&& else
&&&&&&&&&&&&&&&&&&&&&&& {
&&&&&&&&&&&&&&&&&&&&&&&&&&& Debug.Log(&容量过小&);
&&&&&&&&&&&&&&&&&&&&&&&&&&& int temps = gos_
&&&&&&&&&&&&&&&&&&&&&&&&&&& //将gos容量扩大1.5倍
&&&&&&&&&&&&&&&&&&&&&&&&&&& gos_max = (int)(gos_max * 1.5f);
&&&&&&&&&&&&&&&&&&&&&&&&&&& GameObject[] tps = new GameObject[gos_max];
&&&&&&&&&&&&&&&&&&&&&&&&&&& for (int k = 0; k & k++)
&&&&&&&&&&&&&&&&&&&&&&&&&&& {
&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&& tps[k] = gos[k];
&&&&&&&&&&&&&&&&&&&&&&&&&&& }
&&&&&&&&&&&&&&&&&&&&&&&&&&& for (int k = k & gos_ k++)
&&&&&&&&&&&&&&&&&&&&&&&&&&& {
&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&& tps[k] = (GameObject)Instantiate(go, new Vector3(Random.value *
&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&& h, Random.value * _w, 10.0f), Quaternion.identity);
&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&& tps[k].GetComponent&Capture_Use_Sub_ts&().toward = tps[k].
&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&& transform.
&&&&&&&&&&&&&&&&&&&&&&&&&&& }
&&&&&&&&&&&&&&&&&&&&&&&&&&& gos = new GameObject[gos_max];
&&&&&&&&&&&&&&&&&&&&&&&&&&& gos =
&&&&&&&&&&&&&&&&&&&&&&&&&&& gos[gos_cur].GetComponent&Capture_Use_Sub_ts&().toward = new
&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&& Vector3(j, i, 0.0f);
&&&&&&&&&&&&&&&&&&&&&&&&&&& gos[gos_cur].SetActive(true);
&&&&&&&&&&&&&&&&&&&&&&&&&&& gos_cur++;
&&&&&&&&&&&&&&&&&&&&&&& }
&&&&&&&&&&&&&&&&&&& }
&&&&&&&&&&&&&&& }
&&&&&&&&&&& }
&&&&&&&&&&& //隐藏gos中未曾用到的物体
&&&&&&&&&&& for (int k = gos_ k & gos_ k++)
&&&&&&&&&&& {
&&&&&&&&&&&&&&& gos[k].SetActive(false);
&&&&&&&&&&& }
&&& //绘制界面
&&& void OnGUI()
&&&&&&& //绘制纹理作为TextField的背景
&&&&&&& GUI.DrawTexture(new Rect(0.0f, 0.0f, txt_w, txt_h), txt_bg);
&&&&&&& GUIStyle gs = new GUIStyle();
&&&&&&& gs.fontSize = 50;
&&&&&&& show_txt = GUI.TextField(new Rect(0.0f, 0.0f, txt_w, txt_h), show_txt, 15, gs);
&&&&&&& if (GUI.Button(new Rect(0, 100, 80, 45), &确定&))
&&&&&&&&&&& //取消在TextField中的焦点
&&&&&&&&&&& GUI.FocusControl(null);
&&&&&&&&&&& //重置gos_cur的值
&&&&&&&&&&& gos_cur = 0;
&&&&&&&&&&& step = 1;
&&&&&&& //程序退出
&&&&&&& if (GUI.Button(new Rect(0, 155, 80, 45), &退出&))
&&&&&&&&&&& Application.Quit();
&&& //加载图片
&&& IEnumerator WaitLoad(string fileName)
&&&&&&& WWW wwwTexture = new WWW(&file://& + fileName);
&&&&&&& Debug.Log(wwwTexture.url);
&&&&&&& yield return wwwT
&&&&&&& td = wwwTexture.
&&&&&&& step = 3;
&&& //进入步骤2
&&& void My_WaitForSeconds()
&&&&&&& step = 2;
此脚本用来生成截图、读取截图信息以及排列小球的位置,具体过程已在代码中做了详细注释,在此不再赘述,更多信息请到工程中查看。
您对本文章有什么意见或着疑问吗?请到您的关注和建议是我们前行的参考和动力&&
您的浏览器不支持嵌入式框架,或者当前配置为不显示嵌入式框架。

我要回帖

更多关于 红米note2使用说明书 的文章

 

随机推荐