Unity中指定相机截屏,并将图片转为Base64
问题背景:
需求就是只截场景,不包含UI,并将截图保存为Base64格式给到Web展示。
方案:
指定相机截图:
- 1 /// <summary>
- 2 /// 指定相机截屏
- 3 /// </summary>
- 4 /// <param name="camera"></param>
- 5 /// <param name="rect"></param>
- 6 /// <returns></returns>
- 7 public byte[] CaptureScreen(Camera camera, Rect rect)
- 8 {
- 9 RenderTexture rt = new RenderTexture(camera.pixelWidth, camera.pixelHeight, 0);
- 10
- 11 camera.targetTexture = rt;
- 12 camera.Render();
- 13
- 14 RenderTexture.active = rt;
- 15 Texture2D screenShot = new Texture2D(camera.pixelWidth, camera.pixelHeight, TextureFormat.RGBA32, false);
- 16
- 17 screenShot.ReadPixels(rect, 0, 0);
- 18 screenShot.Apply();
- 19
- 20 camera.targetTexture = null;
- 21 RenderTexture.active = null;
- 22 GameObject.Destroy(rt);
- 23
- 24 byte[] bytes = screenShot.EncodeToPNG();
- 25
- 26 return bytes;
- 27 }
这里我没写到内存,因为我不需要,我这是直接传上去。
转Base64很简单:
- 1 /// <summary>
- 2 /// 图片流转Base64
- 3 /// </summary>
- 4 /// <param name="bytesArr"></param>
- 5 /// <returns></returns>
- 6 public String Texture2DToBase64(byte[] bytesArr)
- 7 {
- 8 string strbaser64 = Convert.ToBase64String(bytesArr);
- 9
- 10 return strbaser64;
- 11 }
Base64:
网络上最常见的用于传输8Bit字节码的编码方式之一,Base64编码是从二进制到字符的过程,可用于在HTTP环境下传递较长的标识信息。采用Base64编码具有不可读性,需要解码后才能阅读。Base64由于以上优点被广泛应用于计算机的各个领域,(百科)
截图实例:
最新问题:前端解码Base64图片乱码问题
首先乱码有两点问题造成的:
1.图片过大
2.编码格式
我先对图片进行压缩,并且格式转为jpg,发现不好使。所以锁定原因在编码格式,转utf-8后可以了
- 1 /// <summary>
- 2 /// 图片流转Base64并设置编码格式
- 3 /// </summary>
- 4 /// <param name="bytesArr"></param>
- 5 /// <returns></returns>
- 6 private string Texture2DToBase64(byte[] bytesArr)
- 7 {
- 8
- 9 string strbaser64 = Convert.ToBase64String(bytesArr);
- 10
- 11 byte[] bytes = Encoding.UTF8.GetBytes(strbaser64);
- 12 string utf8String = Encoding.UTF8.GetString(bytes);
- 13
- 14 return utf8String;
- 15 }
Unity中指定相机截屏,并将图片转为Base64的更多相关文章
- Unity通过指定摄像机截屏
简介 介于照抄网上之前的截图教程,然后在实际应用过程中出现了一些小小的问题,修正了一下下,特此分享一下 PS:代码在后面 原理 原理很简单,就是将一个相机的内容渲染到一个贴图上,然后将贴图保存为图片 ...
- unity中编辑器直接截屏代码
using UnityEngine; using System.Collections; using System.Windows.Forms; public class screenshots : ...
- 纯C#实现屏幕指定区域截屏
以前在别的地方见过一个通过调用系统API实现屏幕截图的例子,从内心来说我不太喜欢在C#代码中出现这种情况,现在什么都讲“和谐”,我觉得这种做法就是破坏了我们的“和谐”代码,呵呵,开玩笑,有的时候,不通 ...
- iOS中正确的截屏姿势
昨天写了个用到截屏功能的插件,结果问题不断,今天终于解决好了,把debug过程中所有尝试过的截屏方法都贴出来吧- 第一种 这是iOS 3时代开始就被使用的方法,它被废止于iOS 7.iOS的私有方法, ...
- C#实现屏幕指定区域截屏
//string Opath = @"C:/Picture"; //if (Opath.Substring(Opath.Length - 1, 1) != @ ...
- javascript实现当前页面截屏
javascript实现当前页面截屏 一.前言 有客户要求能对用户当前页面进行指定区域截屏,类似qq截屏的实现效果.比如用户在处理工作的时候,将当前页面录入后的一些信息进行截图下载保存.但又不能安装任 ...
- robotFramework——截屏
测试执行过程中进行截屏并且保存,是任何一款自动化测试工具或者框架必备的功能.那么Robotframework如何进行截屏呢?Robotframework提供了一个“Screenshot”库. 使 ...
- Selenium截屏 图片未加载的问题解决--【懒加载】
需求: 截屏后转PDF. 问题: selenium截屏后,图片未加载 如下图: 原因: 网站使用了懒加载技术:只有在浏览器中纵向滚动条滚动到指定的位置时,页面的元素才会被动态加载. 什么是图片懒加载? ...
- C#截屏
本实例代码实现了WinForm截屏保存为图片,亲测可行. 界面截图: 下载:http://hovertree.com/h/bjaf/scjyuanma.htm 以下代码可以实际运行,在项目HoverT ...
- 使用laravel框架与phantomjs实现截屏功能
在网上看到的关于phantomjs实现截屏功能很多都是与node结合在一起使用,并需要输入命令才能执行.因此我想要实现输入网址即可截屏并输出图片的功能.示例:http://120.77.171.182 ...
随机推荐
- windows10安装ruby
下载ruby 下载地址: ruby各版本下载地址 https://rubyinstaller.org/downloads/ 2.3.3版本 https://www.cr173.com/soft/142 ...
- 深入学习Semantic Kernel:创建和配置prompts functions
引言 上一章我们熟悉了一下 Semantic Kernel 的理论知识,Kernel 创建以及简单的Sample熟悉了一下 SK 的基本使用.在Semantic Kernel中的 kernel fun ...
- P1746 离开中山路
传送锚点:https://www.luogu.com.cn/problem/P1746 题目背景 <爱与愁的故事第三弹·shopping>最终章. 题目描述 爱与愁大神买完东西后,打算坐车 ...
- Swoole 源码分析之 Channel 通道模块
原文首发链接:Swoole 源码分析之 Channel 通道模块 大家好,我是码农先森. 引言 通道,用于协程间通讯,支持多生产者协程和多消费者协程.底层自动实现了协程的切换和调度. 通道与 PHP ...
- go encoding/json 替代者
https://github.com/json-iterator/go 可以替代官方包encoding/json 提升json编码和解码效率
- Android 13 - Media框架(13)- OpenMax(一)
关注公众号免费阅读全文,进入音视频开发技术分享群! 这一节我们将了解Android OpenMax框架,该框架了解完成之后,我们会再回过头去了解 ACodec,将 MediaCodec - ACode ...
- ALL IN AI | 第六届金蝶云·苍穹追光者开发大赛正式启动报名!
2024年5月,第六届金蝶云·苍穹追光者开发大赛x第十三届"中国软件杯"金蝶赛道正式启动报名! 当下,人工智能正以其空前的速度.广度和深度,引领着新一轮科技革命和产业变革,重塑着经 ...
- 『手撕Vue-CLI』拉取版本号
开篇 在上一篇文章中,给 nue-cli 添加了与用户终端交互的功能,这一次来实现一个拉取版本号的功能. 这个功能的背景是,有时候我们在使用脚手架的时候,不同版本的脚手架可能会有不同的功能,所以用户有 ...
- k8s ingress部署安装
ingress概念 ingress与service,deployment同样都是k8s中的一种资源 ingress用于实现域名方式访问k8s内部应用 安装ingress 1. 安装helm: wget ...
- 腾讯消息队列CMQ一键化部署脚本
CMQ-1.0.2-软件包.tar安装包放在家目录,脚本也放在家目录,然后执行:sh -x cmq_install.sh [ip1] [ip2] [ip3] 即可 下列脚本代码保存为:cmq_inst ...