问题背景:

需求就是只截场景,不包含UI,并将截图保存为Base64格式给到Web展示。

方案:

指定相机截图:

  1. 1 /// <summary>
  2. 2 /// 指定相机截屏
  3. 3 /// </summary>
  4. 4 /// <param name="camera"></param>
  5. 5 /// <param name="rect"></param>
  6. 6 /// <returns></returns>
  7. 7 public byte[] CaptureScreen(Camera camera, Rect rect)
  8. 8 {
  9. 9 RenderTexture rt = new RenderTexture(camera.pixelWidth, camera.pixelHeight, 0);
  10. 10
  11. 11 camera.targetTexture = rt;
  12. 12 camera.Render();
  13. 13
  14. 14 RenderTexture.active = rt;
  15. 15 Texture2D screenShot = new Texture2D(camera.pixelWidth, camera.pixelHeight, TextureFormat.RGBA32, false);
  16. 16
  17. 17 screenShot.ReadPixels(rect, 0, 0);
  18. 18 screenShot.Apply();
  19. 19
  20. 20 camera.targetTexture = null;
  21. 21 RenderTexture.active = null;
  22. 22 GameObject.Destroy(rt);
  23. 23
  24. 24 byte[] bytes = screenShot.EncodeToPNG();
  25. 25
  26. 26 return bytes;
  27. 27 }

这里我没写到内存,因为我不需要,我这是直接传上去。

转Base64很简单:

  1. 1 /// <summary>
  2. 2 /// 图片流转Base64
  3. 3 /// </summary>
  4. 4 /// <param name="bytesArr"></param>
  5. 5 /// <returns></returns>
  6. 6 public String Texture2DToBase64(byte[] bytesArr)
  7. 7 {
  8. 8 string strbaser64 = Convert.ToBase64String(bytesArr);
  9. 9
  10. 10 return strbaser64;
  11. 11 }

Base64:

网络上最常见的用于传输8Bit字节码的编码方式之一,Base64编码是从二进制到字符的过程,可用于在HTTP环境下传递较长的标识信息。采用Base64编码具有不可读性,需要解码后才能阅读。Base64由于以上优点被广泛应用于计算机的各个领域,(百科)

截图实例:

最新问题:前端解码Base64图片乱码问题

首先乱码有两点问题造成的:

1.图片过大

2.编码格式

我先对图片进行压缩,并且格式转为jpg,发现不好使。所以锁定原因在编码格式,转utf-8后可以了

  1. 1 /// <summary>
  2. 2 /// 图片流转Base64并设置编码格式
  3. 3 /// </summary>
  4. 4 /// <param name="bytesArr"></param>
  5. 5 /// <returns></returns>
  6. 6 private string Texture2DToBase64(byte[] bytesArr)
  7. 7 {
  8. 8
  9. 9 string strbaser64 = Convert.ToBase64String(bytesArr);
  10. 10
  11. 11 byte[] bytes = Encoding.UTF8.GetBytes(strbaser64);
  12. 12 string utf8String = Encoding.UTF8.GetString(bytes);
  13. 13
  14. 14 return utf8String;
  15. 15 }

Unity中指定相机截屏,并将图片转为Base64的更多相关文章

  1. Unity通过指定摄像机截屏

    简介 介于照抄网上之前的截图教程,然后在实际应用过程中出现了一些小小的问题,修正了一下下,特此分享一下 PS:代码在后面 原理 原理很简单,就是将一个相机的内容渲染到一个贴图上,然后将贴图保存为图片 ...

  2. unity中编辑器直接截屏代码

    using UnityEngine; using System.Collections; using System.Windows.Forms; public class screenshots : ...

  3. 纯C#实现屏幕指定区域截屏

    以前在别的地方见过一个通过调用系统API实现屏幕截图的例子,从内心来说我不太喜欢在C#代码中出现这种情况,现在什么都讲“和谐”,我觉得这种做法就是破坏了我们的“和谐”代码,呵呵,开玩笑,有的时候,不通 ...

  4. iOS中正确的截屏姿势

    昨天写了个用到截屏功能的插件,结果问题不断,今天终于解决好了,把debug过程中所有尝试过的截屏方法都贴出来吧- 第一种 这是iOS 3时代开始就被使用的方法,它被废止于iOS 7.iOS的私有方法, ...

  5. C#实现屏幕指定区域截屏

    //string Opath = @"C:/Picture";            //if (Opath.Substring(Opath.Length - 1, 1) != @ ...

  6. javascript实现当前页面截屏

    javascript实现当前页面截屏 一.前言 有客户要求能对用户当前页面进行指定区域截屏,类似qq截屏的实现效果.比如用户在处理工作的时候,将当前页面录入后的一些信息进行截图下载保存.但又不能安装任 ...

  7. robotFramework——截屏

    测试执行过程中进行截屏并且保存,是任何一款自动化测试工具或者框架必备的功能.那么Robotframework如何进行截屏呢?Robotframework提供了一个“Screenshot”库.    使 ...

  8. Selenium截屏 图片未加载的问题解决--【懒加载】

    需求: 截屏后转PDF. 问题: selenium截屏后,图片未加载 如下图: 原因: 网站使用了懒加载技术:只有在浏览器中纵向滚动条滚动到指定的位置时,页面的元素才会被动态加载. 什么是图片懒加载? ...

  9. C#截屏

    本实例代码实现了WinForm截屏保存为图片,亲测可行. 界面截图: 下载:http://hovertree.com/h/bjaf/scjyuanma.htm 以下代码可以实际运行,在项目HoverT ...

  10. 使用laravel框架与phantomjs实现截屏功能

    在网上看到的关于phantomjs实现截屏功能很多都是与node结合在一起使用,并需要输入命令才能执行.因此我想要实现输入网址即可截屏并输出图片的功能.示例:http://120.77.171.182 ...

随机推荐

  1. windows10安装ruby

    下载ruby 下载地址: ruby各版本下载地址 https://rubyinstaller.org/downloads/ 2.3.3版本 https://www.cr173.com/soft/142 ...

  2. 深入学习Semantic Kernel:创建和配置prompts functions

    引言 上一章我们熟悉了一下 Semantic Kernel 的理论知识,Kernel 创建以及简单的Sample熟悉了一下 SK 的基本使用.在Semantic Kernel中的 kernel fun ...

  3. P1746 离开中山路

    传送锚点:https://www.luogu.com.cn/problem/P1746 题目背景 <爱与愁的故事第三弹·shopping>最终章. 题目描述 爱与愁大神买完东西后,打算坐车 ...

  4. Swoole 源码分析之 Channel 通道模块

    原文首发链接:Swoole 源码分析之 Channel 通道模块 大家好,我是码农先森. 引言 通道,用于协程间通讯,支持多生产者协程和多消费者协程.底层自动实现了协程的切换和调度. 通道与 PHP ...

  5. go encoding/json 替代者

    https://github.com/json-iterator/go 可以替代官方包encoding/json 提升json编码和解码效率

  6. Android 13 - Media框架(13)- OpenMax(一)

    关注公众号免费阅读全文,进入音视频开发技术分享群! 这一节我们将了解Android OpenMax框架,该框架了解完成之后,我们会再回过头去了解 ACodec,将 MediaCodec - ACode ...

  7. ALL IN AI | 第六届金蝶云·苍穹追光者开发大赛正式启动报名!

    2024年5月,第六届金蝶云·苍穹追光者开发大赛x第十三届"中国软件杯"金蝶赛道正式启动报名! 当下,人工智能正以其空前的速度.广度和深度,引领着新一轮科技革命和产业变革,重塑着经 ...

  8. 『手撕Vue-CLI』拉取版本号

    开篇 在上一篇文章中,给 nue-cli 添加了与用户终端交互的功能,这一次来实现一个拉取版本号的功能. 这个功能的背景是,有时候我们在使用脚手架的时候,不同版本的脚手架可能会有不同的功能,所以用户有 ...

  9. k8s ingress部署安装

    ingress概念 ingress与service,deployment同样都是k8s中的一种资源 ingress用于实现域名方式访问k8s内部应用 安装ingress 1. 安装helm: wget ...

  10. 腾讯消息队列CMQ一键化部署脚本

    CMQ-1.0.2-软件包.tar安装包放在家目录,脚本也放在家目录,然后执行:sh -x cmq_install.sh [ip1] [ip2] [ip3] 即可 下列脚本代码保存为:cmq_inst ...