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 {
 //截屏结束的位置
 private Vector3 e_pos;
 //是否绘制
 private bool isDraw;
 //绘制状态
 private bool stateDraw;
 //开始绘制
 private bool stateDrawStart;
 //截屏开始的位置
 private Vector3 s_pos;
 Rect rect;
 public Material lineMaterial;

 private void Update()
 {
  if (stateDraw == true)
  {
   //按下鼠标左键时,记录当前鼠标的位置为开始截屏时的位置
   if (Input.GetMouseButtonDown(0))
   {
    stateDrawStart = true;
    s_pos = Input.mousePosition;
   }
   //鼠标处于按下状态时
   if (Input.GetMouseButton(0))
   {
    e_pos = Input.mousePosition;
    //可以开始绘制
    isDraw = true;
   }
   //抬起鼠标左键时,记录当前鼠标的位置为结束截屏时的位置
   if (Input.GetMouseButtonUp(0) && stateDrawStart == true)
   {
    //结束绘制
    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(rect));
    stateDraw = false;
    stateDrawStart = false;
   }
  }
 }
 /// <summary>
 /// 保存截图
 /// </summary>
 /// <param name="rect"></param>
 /// <returns></returns>
 IEnumerator Capsture(Rect rect)
 {
  yield return new WaitForEndOfFrame();

  //创建纹理(纹理贴图的大小和截屏的大小相同)
  Texture2D tex = new Texture2D((int)rect.width, (int)rect.height, TextureFormat.RGB24, false);
  //读取像素点
  tex.ReadPixels(rect, 0, 0);
  //将像素点应用到纹理上,绘制图片
  tex.Apply();
  //将图片装换成jpg的二进制格式,保存在byte数组中(计算机是以二进制的方式存储数据)
  byte[] result = tex.EncodeToPNG();
  //文件夹(如果StreamAssets文件夹不存在,在Assets文件下创建该文件夹)
  if (!Directory.Exists(Application.streamingAssetsPath))
   Directory.CreateDirectory(Application.streamingAssetsPath);
  //将截屏图片存储到本地
  string filename = Application.dataPath + "/StreamingAssets/Screenshot.png";
  File.WriteAllBytes(filename, result);
 }
 /// <summary>
 /// 用GL画线
 /// </summary>
 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();
 }

 public void OnBtnClick() {
  stateDraw = true;
 }
}

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

时间: 2020-04-16

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

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实现全屏截图以及QQ截图

本文实例为大家分享了Unity实现全屏截图.Unity实现QQ截图,供大家参考,具体内容如下 全屏截图:要实现的是点击鼠标左键,就实现截图,并且将所截图片保存到本地Assets目录下的StreamingAssets文件夹下面. 代码如下: using UnityEngine; using System.Collections; public class TakeScreenShot : MonoBehaviour { void Update () { //点击鼠标左键 if (Input.Get

python采集博客中上传的QQ截图文件

哎,以前写博文的时候没注意,有些图片用QQ来截取,获得的图片文件名都是类似于QQ截图20120926174732-300×15.png的形式,昨天用ftp备份网站文件的时候发现,中文名在flashfxp里面显示的是乱码的,看起来好难受,所以写了一个python小脚本,爬取整个网站,然后获取每个文章页面的图片名,并判断如果是类似于QQ截图20120926174732-300×15.png的形式就输出并将该图片地址和对应的文章地址保存在文件中,然后通过该文件来逐个修改. 好了,下面是程序代码: im

C#实现QQ截图功能及相关问题

对于QQ截图,肯定是早就有认识了,只是一直没有去认真观察这个操作的具体实现步骤.所以这里将自己的记忆中的步骤简单的写一下: 习惯性用QQ或者TIM的人,一般是使用Ctrl+Alt+A  快捷键(热键)快速实现截图. Ctrl+Alt+A  进入截图模式 鼠标左键点击 鼠标拖动对截图去进行选取 鼠标左键弹起 双击截图区域  保存图片到剪贴板 鼠标右键点击 退出截图模式 因为考虑到截图模式的时候  一般只能显示一个窗体  所以就考虑使用单例模式  在ScreenBody窗体中实现以下代码 1:创建单

C#实现属于自己的QQ截图工具

下面就具体介绍下实现截图工具的实现思路. 为了让大家更清楚地知道如何去实现自己的截图工具,首先我来描述下截图的一个过程--我们使用QQ的截图工具和Windows 自带的截图工具都可以发现,当我们点击QQ窗体中的截图按钮时,此时我们将看到一个全屏图片,然后我们可以在其上截图,当鼠标左键按下时,即代表开始截图,并我们可以移动鼠标来改变截图的大小,鼠标弹起时即代表结束截图,此时我们可以双击矩形区域完全截图,并且可以通过粘贴操作把截取的图片粘贴到聊天窗口的发送区,鼠标右键点击则是退出截图.这样我们截图的

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

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

C#截图程序类似腾讯QQ截图实现代码

最近把以前制作的截图程序重新写了一下动了一个大手术 高质量仿照的TX的截图程序 先看几个效果图 拖动过程中显示当前鼠标下一小块的图像信息 尺寸.颜色信息的  注意 这里颜色是用的ARGB 本来截图的话RGB就够了 可是我把那个做成了控件 不仅截图可用 其他地方也可用作图像的选取 具体看代码就知道了 并且我还加了一个可以截图的同时把鼠标也捕获下来 现在看到的是我自己的截图程序 那个工具条啥的 是从TX的截图程序上面拔下来的 上面是几个工具条上的工具的三种粗细型号的展示 看到的蓝色的粗的刷笔 本来想

php使用CutyCapt实现网页截图保存的方法

本文实例讲述了php使用CutyCapt实现网页截图保存的方法.分享给大家供大家参考,具体如下: 网页截图这个功能大家可能用到最多的就是QQ截图,或利用asp.net来实现截图,其实我们也可以直接使用php来网页截图,这里就来给大家介绍php利用CutyCapt实现网页截图的流程: CutyCapt下载地址:http://sourceforge.net/projects/cutycapt/files/cutycapt/ windows CutyCapt不需要安装,直接保存到你的电脑中即可,然后p

Python PyQt4实现QQ抽屉效果

本文实例为大家分享了Python PyQt4实现QQ抽屉效果展示的具体代码,供大家参考,具体内容如下 先看截图效果: 主要是使用了QT的QTabWidget.QToolBox多页窗口部件 # -*- coding: utf-8 -*- from PyQt4.QtGui import * from PyQt4.QtCore import * import sys QTextCodec.setCodecForTr(QTextCodec.codecForName("utf8")) class