zoukankan      html  css  js  c++  java
  • 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         }
  • 相关阅读:
    java常用英文解释
    干货——myeclipse快捷键
    上海面试经常遇到的事务安全问题
    2016java技术岗面试题
    Echarts 获取后台数据 使用后台数据展示 柱形图
    JS实现的MAP结构数据
    Spring MVC 返回json数据 报406错误 问题解决方案
    junit 注意事项,切记
    JNDI中 java:comp/env 的理解
    JMS发布/订阅消息传送例子
  • 原文地址:https://www.cnblogs.com/answer-yj/p/12675192.html
Copyright © 2011-2022 走看看