Unity实现全屏截图以及QQ截图

本文实例为大家分享了Unity实现全屏截图、Unity实现QQ截图,供大家参考,具体内容如下

全屏截图:要实现的是点击鼠标左键,就实现截图,并且将所截图片保存到本地Assets目录下的StreamingAssets文件夹下面。

代码如下:

using UnityEngine;
using System.Collections;

public class TakeScreenShot : MonoBehaviour {
void Update () {
//点击鼠标左键
if (Input.GetMouseButtonDown (0)) {
//开启协程方法
StartCoroutine (MyCaptureScreen ());

}
}
//我的截屏方法
IEnumerator MyCaptureScreen(){
//等待所有的摄像机和GUI被渲染完成。
yield return new WaitForEndOfFrame ();
//创建一个空纹理(图片大小为屏幕的宽高)
Texture2D tex = new Texture2D (Screen.width,Screen.height);
//只能在帧渲染完毕之后调用(从屏幕左下角开始绘制,绘制大小为屏幕的宽高,宽高的偏移量都为0)
tex.ReadPixels (new Rect (0,0,Screen.width,Screen.height),0,0);
//图片应用(此时图片已经绘制完成)
tex.Apply ();
//将图片装换成jpg的二进制格式,保存在byte数组中(计算机是以二进制的方式存储数据)
byte[] result = tex.EncodeToJPG ();
//文件保存,创建一个新文件,在其中写入指定的字节数组(要写入的文件的路径,要写入文件的字节。)
System.IO.File.WriteAllBytes (Application.streamingAssetsPath+"/1.JPG",result);

}
}

之后思考一下,如何像qq截图那样,绘制一个截屏的矩形框只截取自己想要的部分呢?

using UnityEngine;
using System.Collections;
using System.IO;//引入IO流
public class NewBehaviourScript : MonoBehaviour {
//定义一个存储截屏图片的路径
string filePath;
void Start () {
//图片存储在StreamingAssets文件夹内。
filePath = Application.streamingAssetsPath + "/1.png";
}
Rect rect;
//截屏开始的位置
Vector3 s_pos;
//截屏结束的位置
Vector3 e_pos;
//是否绘制
bool isDraw;
void Update()
{
//按下鼠标左键时,记录当前鼠标的位置为开始截屏时的位置
if(Input.GetMouseButtonDown(0))
{
s_pos = Input.mousePosition;
}
//鼠标处于按下状态时
if(Input.GetMouseButton(0))
{
e_pos = Input.mousePosition;
//可以开始绘制
isDraw = true;
}
//抬起鼠标左键时,记录当前鼠标的位置为结束截屏时的位置
if(Input.GetMouseButtonUp(0))
{
//结束绘制
isDraw = false;
e_pos = Input.mousePosition;
//获取到截屏框起始点的位置,和宽高。
rect = new Rect(Mathf.Min(s_pos.x,e_pos.x),Mathf.Min(s_pos.y,e_pos.y),Mathf.Abs(s_pos.x-e_pos.x),Mathf.Abs(s_pos.y - e_pos.y));
//开启绘制的协程方法
StartCoroutine(Capsture(filePath, rect));
}
}

IEnumerator Capsture(string filePath, Rect rect)
{
yield return new WaitForEndOfFrame();
//创建纹理(纹理贴图的大小和截屏的大小相同)
Texture2D tex = new Texture2D((int)rect.width, (int)rect.height);
//读取像素点
tex.ReadPixels(rect, 0, 0) ;
//将像素点应用到纹理上,绘制图片
tex.Apply();
//将图片装换成jpg的二进制格式,保存在byte数组中(计算机是以二进制的方式存储数据)
byte[] result =tex.EncodeToPNG();
//文件夹(如果StreamAssets文件夹不存在,在Assets文件下创建该文件夹)
if(!Directory.Exists(Application.streamingAssetsPath))
Directory.CreateDirectory(Application.streamingAssetsPath);
//将截屏图片存储到本地
File.WriteAllBytes(filePath, result);
}
//在这里要用GL实现绘制截屏的矩形框
//1.GL的回调函数
//2.定义一个材质Material
public Material lineMaterial;

void OnPostRender() {
if(!isDraw) return;
print (s_pos);

Vector3 sPos = Camera.main.ScreenToWorldPoint(s_pos + new Vector3(0, 0, 10));
Vector3 ePos = Camera.main.ScreenToWorldPoint(e_pos + new Vector3(0, 0, 10));

print(string.Format("GL.....{0}, {1}", sPos, ePos));
// Set your materials Done
GL.PushMatrix();
// yourMaterial.SetPass( );
lineMaterial.SetPass(0);//告诉GL使用该材质绘制
// Draw your stuff
//始终在最前面绘制
GL.invertCulling = true;
GL.Begin(GL.LINES);//开始绘制

//GL.Vertex(sPos);
//GL.Vertex(ePos);
//如果想要绘制,矩形,将下面代码启动
GL.Vertex(sPos);
GL.Vertex(new Vector3(ePos.x, sPos.y, 0));

GL.Vertex(new Vector3(ePos.x, sPos.y, 0));
GL.Vertex(ePos);

GL.Vertex(ePos);
GL.Vertex(new Vector3(sPos.x, ePos.y, 0));

GL.Vertex(new Vector3(sPos.x, ePos.y, 0));
GL.Vertex(sPos);
GL.End();//结束绘制

GL.PopMatrix();
}

}

在脚本组件中拖入材质球

此图片黑色的矩形框就是通过GL绘制出来的(通过记录点的位置来依次绘制出线)

以上就是本文的全部内容,希望对大家的学习有所帮助,也希望大家多多支持我们。

时间: 2020-04-14

unity实现QQ截图功能

本文实例为大家分享了unity实现QQ截图功能的具体代码,供大家参考,具体内容如下 效果: 代码如下: using System.Collections; using System.Collections.Generic; using System.Text.RegularExpressions; using UnityEngine; using NPinyin; using System.IO; public class NewBehaviourScript : MonoBehaviour {

Unity实现截图功能

本文实例为大家分享了Unity实现截图功能的具体代码,供大家参考,具体内容如下 一.使用Unity自带API using UnityEngine; using UnityEngine.UI; public class ScreenShotTest : MonoBehaviour { public RawImage img; private void Update() { //使用ScreenCapture.CaptureScreenshot if (Input.GetKeyDown(KeyCod

Unity实现截屏以及根据相机画面截图

在游戏开发和软件开发中,经常需要截图的功能,分带UI的截图和不带UI的截图功能.代码如下: using System.Collections; using System.Collections.Generic; using UnityEngine; public static class ScreenShotForCamera{ public static void CaptureScreen(string _path = null) { if (_path == null) _path = "

unity实现按住鼠标选取区域截图

本文实例为大家分享了unity按住鼠标选取区域截图的具体代码,供大家参考,具体内容如下 private int capBeginX; private int capBeginY; private int capFinishX; private int capFinishY; public Image showImg; // Use this for initialization void Start () { } // Update is called once per frame void U

Unity实现相机截图功能

最近做项目的时候需要在游戏里截一张高清截图,研究了一下写成脚本,方便以后使用. 脚本可以自定义分辨率,用相机截高清截图.可以用代码动态截图,也可以在编辑模式下截图. 注意截图宽高比要正确,宽高比不正确时可能会出问题. 截图效果: 脚本: CameraCapture.cs using UnityEngine; using System.IO; /// <summary> /// 相机截图 /// <para>ZhangYu 2018-07-06</para> /// &l

JavaScript实现网页截图功能

使用JavaScript截图,这里我要推荐两款开源组件:一个是Canvas2Image,它可以将Canvas绘图编程PNG/JPEG/BMP的图像:但是光有它还不够,我们需要给任意DOM(至少是绝大部分)截图,这就需要html2canvas,它可以将DOM对象转换成一个canvas对象.两者的功能结合起来,就可以把页面上的DOM截图成PNG或者JPEG图像了,很酷. Canvas2Image 它的原理是利用了HTML5的canvas对象提供了toDataURL()的API: 复制代码 代码如下:

Java模拟QQ桌面截图功能实现方法

本文实例讲述了Java模拟QQ桌面截图功能实现方法.分享给大家供大家参考.具体如下: QQ的桌面截图功能非常方便,去年曾用Java模拟过一个,现整理出来. 本方法首先需要抓到屏幕的整个图象,将图象显示在一个JFrame中,再将JFrame全屏显示,这样就模拟出了一个桌面,Java也就可以获得鼠标的作用区域从而实现桌面中的小范围截屏. import javax.swing.*; import java.awt.*; import java.awt.event.ActionEvent; import

使用微信PC端的截图dll库实现微信截图功能

本文实例为大家分享了截图dll库实现微信截图功能 ,供大家参考,具体内容如下 ScreenForm.cs代码: using System; using System.Collections.Generic; using System.Runtime.InteropServices; using System.Windows.Forms; namespace screenT { public partial class ScreenForm : Form { public ScreenForm()

C#实现的滚动网页截图功能示例

本文实例讲述了C#实现的滚动网页截图功能.分享给大家供大家参考,具体如下: using System; using System.Collections.Generic; using System.ComponentModel; using System.Data; using System.Drawing; using System.Linq; using System.Text; using System.Windows.Forms; namespace WindowsFormsApplic

javascript实现粘贴qq截图功能(clipboardData)

这篇文章主要介绍了在网页中实现读取剪贴板粘贴截图功能,即可以把剪贴板的截图Ctrl+V粘贴到网页的一个输入框中,例如QQ截图.旺旺截图或者其它截图软件.具体代码如下. <!DOCTYPE HTML> <html lang="en-US"> <head> <meta charset="UTF-8"> <title>利用 clipboardData 在网页中实现截屏粘贴的功能</title> <

Android实现拍照截图功能

本文将向大家展示如何拍照截图. 先看看效果图: 拍照截图有点儿特殊,要知道,现在的Android智能手机的摄像头都是几百万的像素,拍出来的图片都是非常大的.因此,我们不能像对待相册截图一样使用Bitmap小图,无论大图小图都统一使用Uri进行操作. 一.首先准备好需要使用到的Uri: private static final String IMAGE_FILE_LOCATION = "file:///sdcard/temp.jpg";//temp file Uri imageUri =

Selenium Webdriver实现截图功能的示例

前几天在研究中自动化的时候突发奇想,想着能不能来截个图,以便之后查看,实现的方法其实也不难,毕竟selenium webdriver已经提供了截图额功能,TakesScreenshot接口函数(英文意思就是获取屏幕截图takes-screenshot). 废话不多说了,直接上代码 package com.wch; import java.io.File; import java.io.IOException; import org.junit.After; import org.junit.Be