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 = "Screenshot.png";

 Application.CaptureScreenshot(_path, 0);
 }

 public static Texture2D CaptureScreen(Rect rect, bool _isCreatePhoto = false, string _path = null)
 {
 // 先创建一个的空纹理,大小可根据实现需要来设置
 Texture2D screenShot = new Texture2D((int)rect.width, (int)rect.height, TextureFormat.RGB24, false);

 // 读取屏幕像素信息并存储为纹理数据,
 screenShot.ReadPixels(rect, 0, 0);
 screenShot.Apply();

 // 然后将这些纹理数据,成一个png图片文件
 if (_isCreatePhoto)
 {
 if(_path == null)
 _path = Application.dataPath + "/Screenshot.png";

 byte[] bytes = screenShot.EncodeToPNG();
 string filename = _path;
 System.IO.File.WriteAllBytes(filename, bytes);
 Debug.Log(string.Format("截屏了一张图片: {0}", filename));
 }

 // 最后,我返回这个Texture2d对象,这样我们直接,所这个截图图示在游戏中,当然这个根据自己的需求的。
 return screenShot;
 }

 //
 public static Texture2D CaptureCamera(ref Camera _camera, Rect _rect, int _destX, int _destY, bool _isCreatePhoto = false, string _path = null)
 {
 RenderTexture renderTexture = new RenderTexture((int)_rect.width, (int)_rect.height, 24, RenderTextureFormat.ARGB32);
 _camera.targetTexture = renderTexture;
 _camera.Render();

 // 激活这个renderTexture, 并从中中读取像素
 RenderTexture.active = _camera.targetTexture;
 Texture2D screenShot = new Texture2D((int)_rect.width, (int)_rect.height, TextureFormat.ARGB32, false);
 screenShot.ReadPixels(_rect, _destX, _destY); //从(_destX,_destY)坐标开始读取_rect大小的图片
 screenShot.Apply();

 //重置参数
 //_camera.targetTexture = null;
 RenderTexture.active = null;
 //GameObject.Destroy(renderTexture);

 //生成PNG图片
 if (_isCreatePhoto)
 {
 if (_path == null)
 _path = Application.dataPath + "/Screenshot.png";

 byte[] bytes = screenShot.EncodeToPNG();
 string filename = _path;
 System.IO.File.WriteAllBytes(filename, bytes);
 Debug.Log(string.Format("截屏了一张照片: {0}", filename));
 }

 return screenShot;
 }
}

小编再为大家分享一段:Unity实现截屏功能,希望可以帮到大家

public class ScreenShot : MonoBehaviour
{

 void OnScreenShotClick()
 {
 //得到当前系统时间
 System.DateTime now = System.DateTime.Now;
 string times = now.ToString();
 //去掉前后空格
 times = times.Trim();
 //将斜杠替换成横杠
 times = times.Replace("/", "-");

 string fileName = "ARScreenShot" + times + ".png";
 //判断该平台是否为安卓平台
 if (Application.platform == RuntimePlatform.Android)
 {
 //参数依次为 屏幕宽度 屏幕高度 纹理格式 是否使用映射
 Texture2D texture = new Texture2D(Screen.width, Screen.height, TextureFormat.RGB24, false);
 //读取贴图
 texture.ReadPixels(new Rect(0, 0, Screen.width, Screen.height), 0, 0);
 //应用截屏
 texture.Apply();
 //将对象序列化
 byte[] bytes = texture.EncodeToPNG();
 //设定存储到的手机文件夹路径
 string destination = "/sdcard/DCIM/Screenshots";
 //如果不存在该文件夹
 if (!Directory.Exists(destination))
 {
 //创建该文件夹
 Directory.CreateDirectory(destination);
 }
 string pathSave = destination + "/" + fileName;
 File.WriteAllBytes(pathSave, bytes);
 }
 }
}

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

(0)

相关推荐

  • 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实现相机截图功能

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

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

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

  • 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实现按住鼠标选取区域截图

    本文实例为大家分享了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实现截屏以及根据相机画面截图

    在游戏开发和软件开发中,经常需要截图的功能,分带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 = "

  • 浅谈Android截屏和指定View生成截图

    当前页面截图(截取整个屏幕) 截取当前Activity页面的截图,可以通过窗体最底层的decorView进行缓存,然后根据这个缓存对象生成一张图片.有的需要不需要状态栏,也可以指定生成图片的宽高,把状态栏去除. /** * 截取当前窗体的截图,根据[isShowStatusBar]判断是否包含当前窗体的状态栏 * 原理是获取当前窗体decorView的缓存生成图片 */ fun captureWindow(activity: Activity, isShowStatusBar: Boolean)

  • Android截屏截图的几种方法总结

    Android截屏 Android截屏的原理:获取具体需要截屏的区域的Bitmap,然后绘制在画布上,保存为图片后进行分享或者其它用途 一.Activity截屏 1.截Activity界面(包含空白的状态栏) /** * 根据指定的Activity截图(带空白的状态栏) * * @param context 要截图的Activity * @return Bitmap */ public static Bitmap shotActivity(Activity context) { View vie

  • iOS捕捉截屏事件并展示截图效果

    摩拜单车.微信的截屏就做的比较人性化. 现在很多APP开始支持用户截屏后,主动获取截图并弹出分享视图,这样用户就不用去相册去找了,感觉体验不错,今天就分享一下 截屏开发的心得,希望能帮助iOS的朋友. iOS7之后,苹果开放出一个通知:UIApplicationUserDidTakeScreenshotNotification,截屏时系统就会发出这个通知,需要你注册这个通知,就能捕捉到截屏图片. 下面的代码,实现的是用户截屏后,捕获到截屏图片,展示出来: //注册截屏通知 [[NSNotific

  • C++实现截图截屏的示例代码

    目录 1.截图工具 1.1 键盘截图(PrtScn键) 1.2 win10自带截图(Win+Shift+S) 1.3 系统自带的截图小工具 1.4 ffmpeg 1.5 ScreenToGif 1.6 Chrome 2.C++.GDI 2.1 微软官方例子 2.2 C++.GDI.CImage 3.C++.OpenGL 4.C++.OpenCV 5.C++.QT 1.截图工具 1.1 键盘截图(PrtScn键) 如何使用Microsoft Windows操作系统中的Print Screen(打印

  • Delphi实现截屏存盘的方法

    本文实例讲述了Delphi实现截屏存盘的方法.分享给大家供大家参考.具体分析如下: 该实例可实现截取屏幕,并保存为JPEG文件格式的功能. procedure TForm1.ScreenCap(LeftPos,TopPos,RightPos,BottomPos:integer); var RectWidth,RectHeight:integer; SourceDC,DestDC,Bhandle:integer; Bitmap:TBitmap; MyJpeg: TJpegImage; Stream

  • java编程实现屏幕截图(截屏)代码总结

    本文实例总结了常见的java编程实现屏幕截图方法.分享给大家供大家参考,具体如下: 方法一: import java.awt.Desktop; import java.awt.Dimension; import java.awt.Rectangle; import java.awt.Robot; import java.awt.Toolkit; import java.awt.image.BufferedImage; import java.io.File; import javax.image

  • 在iOS开发的Quartz2D使用中实现图片剪切和截屏功能

    图片剪切 一.使用Quartz2D完成图片剪切 1.把图片显示在自定义的view中 先把图片绘制到view上.按照原始大小,把图片绘制到一个点上. 代码: 复制代码 代码如下: - (void)drawRect:(CGRect)rect {     UIImage *image2=[UIImage imageNamed:@"me"];     [image2 drawAtPoint:CGPointMake(100, 100)]; } 显示: 2.剪切图片让图片圆形展示 思路:先画一个圆

  • Python实现截屏的函数

    本文实例讲述了Python实现截屏的函数.分享给大家供大家参考.具体如下: 1.可指定保存目录. 2.截屏图片名字以时间为文件名 3.截屏图片存为JPG格式图片,比BMP小多的,一个1024*800的截屏BMP有3M多,一个1024*800的JPG只有300K左右. 就可做一个简单的监控了,每10秒截一屏,放到一个指定隐藏的文件夹里,基本掌握机子的使用了,适合监控自家小孩的使用情况 # -*- coding: cp936 -*- import time,Image import os, win3

  • iOS 对当前webView进行截屏的方法

    UIWebView和WKWebView的截屏有所区别: UIWebView: func getImage(context: ServiceExecuteContext) -> UIImage { //创建一个基于位图的图形上下文并指定大小 UIGraphicsBeginImageContextWithOptions(context.fromViewController.webView.bounds.size, true, 0) //renderInContext呈现接受者及其子范围到指定的上下文

随机推荐