Csharp/C#教程:从Texture2D创建UI图像分享


从Texture2D创建UI图像

我正在开发一个实时流应用程序,它接收JPEG图像作为字节数组,并使用UI.Image显示屏幕上。 它工作正常,但我正在进行优化 ,几乎没有问题 。 目前,我在下面的代码将字节数组转换为Texture2D然后从Texture2D 创建一个Sprite ,然后将该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个步骤来显示图像到屏幕。

byte array – > Texture2D – > Sprite – > UI.Image

但我希望它看起来像byte array – > Texture2D – > UI.Image

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

我的问题是:

  1. 如何在不camTexture(Texture2D)转换为Sprite情况下将camTexture(Texture2D)指定给屏幕screenDisplay(UI.Image)

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

  3. 如果有解决方案 ,那么该解决方案在性能内存管理方面是否优于我目前的解决方案?

注意:我没有计划使用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图像分享的全部内容,如果对大家有所用处且需要了解更多关于C#学习教程,希望大家多多关注—计算机技术网(www.ctvol.com)!

本文来自网络收集,不代表计算机技术网立场,如涉及侵权请联系管理员删除。

ctvol管理联系方式QQ:251552304

本文章地址:https://www.ctvol.com/cdevelopment/943399.html

(0)
上一篇 2021年11月14日
下一篇 2021年11月14日

精彩推荐