Unity | 部分区域自由截图
一、固定区域截屏:
Unity三种截屏方法
二、自由截图
using System.Collections;
using UnityEngine;///挂在摄像机上
///如果要截图UI,需将Canvas的RenderMode设置为Screen Space-Camera,并将Render Camera设置为挂该脚本的摄像机public class Capture : MonoBehaviour {public Color rColor = Color.green;//截图框颜色public Vector3 start = Vector3.zero;//开始位置public Vector3 end = Vector3.zero;//结束位置public Material rMat = null;//截图框材质,shader为"UI/Default"即可public bool drawFlag = false;//是否开始截图private Rect rect;//截图区域private Texture2D cutImage;//图片byte[] bytes;//图片bytevoid Update(){//按下鼠标左键开始截图if (Input.GetMouseButtonDown(0) && SecondPageManager._instance. ToCapture){SecondPageManager._instance.CapturePanel.SetActive(false);drawFlag = true;start = Input.mousePosition;}//抬起鼠标左键结束截图if (Input.GetMouseButtonUp(0) && SecondPageManager._instance.ToCapture && drawFlag){SecondPageManager._instance.ToCapture = false;drawFlag = false;StartCoroutine(CutImage());}//点击鼠标右键取消截图if (Input.GetMouseButtonDown(1) && SecondPageManager._instance.ToCapture){SecondPageManager._instance.CapturePanel.transform.parent.gameObject.SetActive(false);SecondPageManager._instance.CapturePanel.SetActive(false);SecondPageManager._instance.ToCapture = false;drawFlag = false;}}//绘制框选 void OnPostRender(){ if (drawFlag){end = Input.mousePosition;//鼠标当前位置 GL.PushMatrix();//保存摄像机变换矩阵 if (!rMat)return;rMat.SetPass(0);GL.LoadPixelMatrix();//设置用屏幕坐标绘图 GL.Begin(GL.QUADS);GL.Color(new Color(rColor.r, rColor.g, rColor.b, 0.2f));//设置颜色和透明度,方框内部透明 GL.Vertex3(start.x, start.y, 0);GL.Vertex3(end.x, start.y, 0);GL.Vertex3(end.x, end.y, 0);GL.Vertex3(start.x, end.y, 0);GL.End();GL.Begin(GL.LINES);GL.Color(rColor);//设置方框的边框颜色 边框不透明 GL.Vertex3(start.x, start.y, 0);GL.Vertex3(end.x, start.y, 0);GL.Vertex3(end.x, start.y, 0);GL.Vertex3(end.x, end.y, 0);GL.Vertex3(end.x, end.y, 0);GL.Vertex3(start.x, end.y, 0);GL.Vertex3(start.x, end.y, 0);GL.Vertex3(start.x, start.y, 0);GL.End();GL.PopMatrix();//恢复摄像机投影矩阵 }}IEnumerator CutImage(){string date = System.DateTime.Now.ToString("yyyyMMddHHmmss");//图片大小 if (end.x > start.x&& start.y > end.y){cutImage = new Texture2D((int)(end.x - start.x), (int)(start.y - end.y), TextureFormat.RGB24, true);//坐标左下角为(0,0)点rect = new Rect((int)start.x,Screen.height - (int)(Screen.height - end.y), (int)(end.x - start.x),(int)(start.y - end.y));yield return new WaitForEndOfFrame();cutImage.ReadPixels(rect, 0, 0, false);cutImage.Apply();yield return cutImage;bytes = cutImage.EncodeToPNG();//保存截图 //File.WriteAllBytes("D:/CutImage" + date + ".png", bytes);//公式识别StartCoroutine(FormulaRecognize._instance.OCRIdentify(bytes));}else{StartCoroutine(FormulaRecognize._instance.OCRIdentify(null));Debug.Log("请按照左上角到右下角的方式截图"); }}
}
Unity | 部分区域自由截图相关推荐
- ubuntu系统下怎么对任意区域的截图
ubuntu系统下怎么对任意区域的截图 1.截取全屏快捷键:PrintScreen 2.截取当前窗口快捷键:Alt+PrintScreen 3.截取随意区域屏幕快捷键 这个需要自己添加快捷键 设置-键 ...
- Android Studio 基础 之 截图,指定截图区域动态截图
Android Studio 基础 之 截图,指定截图区域动态截图 目录 Android Studio 基础 之 截图,指定截图区域动态截图 一.简单介绍 二.实现原理 三.注意事项 四.预览效果 五 ...
- 自由截图、提取、翻译图中文字——搜狗浏览器之截图扩展
搜狗浏览器是本人使用的主力浏览器,其界面简洁时尚,可以带来秒开网页的超快体验,支持安装扩展,扩充浏览器的功能.本文介绍搜狗浏览器的截图扩展的功能和用法. 截图扩展由搜狗浏览器团队开发,具有以下功能: ...
- vue实现指定区域自由拖拽、打印功能
先看下效果图,实现指定区域内内容自由拖拽,不超出.动态设置字体颜色及字号:设置完成实现打印指定区域内容,样式不丢失. 1.运行命令npm i vue-draggable-resizable -S, 安 ...
- Unity 第三人称自由视角
环绕相机控制脚本 该脚本需要挂载在环绕相机上,而环绕相机不绑定在角色身上,而是作为一个单独的存在 此外,由于一般来说,角色的原点都在脚底,所以需要特别在角色的中心位置放置一个空对象作为视野中心,并在面 ...
- Unity摄像机画面制作全景图片|截图制作全景图
Unity摄像机画面制作全景图片 目录 效果展示 Unity编辑器中使用脚本部分 Unity编辑器中使用方法 Unity动态存储图片脚本部分 Unity动态存储图片使用方法 目录 你好! 这是你第一次 ...
- PyQt+Opencv-python多线程显示摄像头信息至QLabel,摄像头显示区域自由拉伸尺寸
文章目录 前言 效果 资源下载 核心代码 编程思路 Camera.py Widget.py 前言 通过PyQt与Opencv-python实现多线程显示摄像头信息至QLabel,可以同时拉伸窗口, ...
- unity用虚拟相机截图
1,工程 2 脚本 Capture.cs using System.Collections; using System.Collections.Generic; using UnityEngine; ...
- Unity调用摄像头并截图
首先界面是这样的,很简易,脚本上挂了三个按钮 直接上代码 using UnityEngine; using UnityEngine.UI;public class WebCamera : MonoBe ...
- Unity功能记录(一) ------ 截图/录屏保存到相册(Android/iOS横屏竖屏都可以)
截屏和录屏unity端代码都已经分享过 : Unity功能记录(十七) ------ 截屏功能 Unity插件(二) ------ NatCorder(录屏保存到相册) 但是之前一个个的其实并没有用在 ...
最新文章
- App自动化测试探索(一)借助Appium实现APP的自动化测试
- kali 改root_Kali Linux 将默认以非 root 身份运行
- Memcached源码分析
- SpringMVC拦截器-快速入门详解(应用)
- 显式(静态)调用: LIB + DLL + .H
- 同字母异序词 python_49. 字母异位次分组(Python)
- 使用 Go 实现 TLS socket server
- 第八届“图灵杯”NEUQ-ACM程序设计竞赛个人赛——E题 Seek the Joker II
- Watson的未来就是IBM的未来
- 面试了57位程序员,我发现混得好的人都有这个特质!
- AD09,如何设置按住鼠标轮放大缩小
- 伺服驱动器cn1引脚定义_伺服驱动器CN1引脚定义,和面板操作设置,跪求高手指点。...
- Idea导出项目jar包
- 关于实习4个月的一些总结
- python毕业设计项目源码选题(14)校园失物招领系统毕业设计毕设作品开题报告开题答辩PPT
- Boost电路SX1308单电源转双电源输出低成本Sepic+Cuk方案
- Spark总结之RDD(四)
- ROS 学习笔记3. launch文件的使用
- 软件测试基础知识bbst,海盗派测试管理: RSTM.PDF
- 机器学习------L1、L2规范化(L1 Regularization、L1 Regularization)