c# - 从 Texture2D 创建 UI 图像

标签 c# performance optimization unity3d

我正在开发一个直播应用程序,该应用程序接收 JPEG 图像作为字节数组,并在屏幕显示它 strong> 与 UI.Image。它工作很好,但我正在优化并且有几个问题。目前,我下面的代码将 arrays of bytes 转换为 Texture2D,然后从 creates Sprite Texture2D 然后将该 Sprite 分配给 UI.Iamge 以显示在屏幕上。

Texture2D camTexture;
Image screenDisplay;
public byte[] JPEG_VIDEO_STREAM;
bool updateScreen = false;

//初始化

JPEG_VIDEO_STREAM = new byte[20000];
camTexture = new Texture2D(Screen.width, Screen.height, TextureFormat.RGB24, false);

//Update函数中运行的主要代码

if(updateScreen){
camTexture.LoadImage(JPEG_VIDEO_STREAM);
Sprite tempSprite = Sprite.Create(camTexture, new Rect(0, 0, camTexture.width, camTexture.height), Vector2.zero, 0);
screenDisplay.sprite = tempSprite;
updateScreen = false;
}

上面的代码目前只执行 3 个步骤来将图像显示到屏幕上。

字节数组 -> Texture2D -> Sprite -> UI.Image.

但我希望它看起来像字节数组 -> Texture2D-> UI。图片

我想将 Texture2D 直接写入 UI.Image 而不 创建新的 Sprite 因为我相信 Sprite.Create(camTexture, new Rect(0, 0, camTexture.width, camTexture.height), Vector2.zero, 0); 每次分配新内存 Sprite.Create 已调用。我查看了 Unity 文档,找不到任何其他方法来执行此操作。

我的问题是:

  1. 如何在不转换 camTexture(Texture2D) 的情况下将 camTexture(Texture2D) 分配给屏幕 screenDisplay(UI.Image)先到Sprite

  2. Sprite.Create 是否在调用时分配新内存?

  3. 如果对此有解决方案,那么在性能和< strong>内存管理?

注意:我没有计划使用OnGUI 来绘制Texture2D。我想用新的 Unity UI 来做到这一点。谢谢。

编辑: 使用 Joe 对 RawImage 的回答,最终代码如下所示:

RawImage screenDisplay;
if(updateScreen){
camTexture.LoadImage(JPEG_VIDEO_STREAM);
screenDisplay.texture = camTexture;
updateScreen = false;
}

不再需要 Sprite。

最佳答案

认为可以通过专门使用RawImage 而不是Image 来做到这一点。

我广泛使用 RawImage,因为我们必须“显示 PNG”并且它更容易。

考虑一下非常方便的技巧:

只需开始您导入的普通灰色 PNG .. 然后修改它 ..而不是尝试从头开始构建?

我发现的一个有趣的好奇心是:通常要镜像图像,您只需简单地将 x 或 y 缩放到 -1。除非已修复,否则 Unity 会遇到一个问题,即这对 RawImage 不起作用。

    // currently in Unity, the ONLY way to mirror a RAW image is by fooling with
    // the uvRect. changing the scale is completely broken.

    if ( shouldWeMirror )
      rawImage.uvRect = new Rect(1,0,-1,1); // means mirror
    else
      rawImage.uvRect = new Rect(0,0,1,1);  // means no flip

另一个有趣的因素。出于这个原因,许多 Unity 项目仍在使用(甚至 2017 年)最高级的 2dToolkit。它可以立即解决此类问题。

关于c# - 从 Texture2D 创建 UI 图像,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/36044140/

相关文章:

java - JRE 7 JVM 更新和优化

c# - Thread.Sleep 现在使用高分辨率计时器还是 Windows 10 更改了默认系统时钟频率?

c# - XmlReader 类中的 `ReadString` 与 `ReadContentAsString` 有什么区别?

c - ANSI C#define VS 函数

Android Hierarchy Viewer 无法在设备模拟器上加载窗口数据。字符串索引超出范围 173

c# - 为什么 EF 在第一次调用方法中需要很长时间

java - 最佳(scala 和其他针对 java vm 的语言)优化

c# - 比较 byte[] 和 T

c# - 是否可以用交替的垂直列填充 DataGridView?

JavaScript "compilers"