【问题标题】:Unity3d - LoadRawTextureDataUnity3d - LoadRawTextureData
【发布时间】:2017-09-28 08:25:32
【问题描述】:

我正在从服务器接收 jpg 图像字节数据。它的字节数据可以使用LoadImage 方法转换为图像。但是这种方法速度很慢,只能在Unity3d主线程中使用。

LoadRawTextureData - 速度很快,但需要“原始字节数据”。

原始数据示例:

byte[] pvrtcBytes = new byte[] {
            0x30, 0x32, 0x32, 0x32, 0xe7, 0x30, 0xaa, 0x7f, 0x32, 0x32, 0x32, 0x32, 0xf9, 0x40, 0xbc, 0x7f,
            0x03, 0x03, 0x03, 0x03, 0xf6, 0x30, 0x02, 0x05, 0x03, 0x03, 0x03, 0x03, 0xf4, 0x30, 0x03, 0x06,
            0x32, 0x32, 0x32, 0x32, 0xf7, 0x40, 0xaa, 0x7f, 0x32, 0xf2, 0x02, 0xa8, 0xe7, 0x30, 0xff, 0xff,
            0x03, 0x03, 0x03, 0xff, 0xe6, 0x40, 0x00, 0x0f, 0x00, 0xff, 0x00, 0xaa, 0xe9, 0x40, 0x9f, 0xff,
            0x5b, 0x03, 0x03, 0x03, 0xca, 0x6a, 0x0f, 0x30, 0x03, 0x03, 0x03, 0xff, 0xca, 0x68, 0x0f, 0x30,
            0xaa, 0x94, 0x90, 0x40, 0xba, 0x5b, 0xaf, 0x68, 0x40, 0x00, 0x00, 0xff, 0xca, 0x58, 0x0f, 0x20,
            0x00, 0x00, 0x00, 0xff, 0xe6, 0x40, 0x01, 0x2c, 0x00, 0xff, 0x00, 0xaa, 0xdb, 0x41, 0xff, 0xff,
            0x00, 0x00, 0x00, 0xff, 0xe8, 0x40, 0x01, 0x1c, 0x00, 0xff, 0x00, 0xaa, 0xbb, 0x40, 0xff, 0xff,
        };

如何将非原始字节数组转换为原始字节数组?

PS:Unity 5.6.0f3

【问题讨论】:

  • 没有“原始字节数据”数据类型。所以你不需要“转换”你的数组。 LoadRawTextureData 方法接受一个字节数组作为参数。
  • 我明白这一点。我正在搜索 'convert' 方法从 jpeg byte[] 到 'raw' byte[]
  • 无法快速将 jpg 转换为原始字节数组。让我解释。 JPG格式被压缩了,它的字节不是颜色信息,而是一堆定义图像的“碎片”,在这个过程中失去了一点原始信息和质量。在 Unity 中,LoadImage 方法将采用您放在那里的任何格式作为图像并转换为纹理(颜色数组),显然需要一些时间来完成它,而 LoadRawTexture 只是跳过转换图像的步骤,因为它只允许已经图像颜色的未压缩原始数据。希望这会有所帮助。
  • @nosmirck 但我们可以在主线程之外执行转换 byte[] => 颜色信息。 LoadImage - 仅在主线程上工作。
  • @МстиславПавлов 有足够大的原始纹理你会遇到同样的问题,问题不在于纹理被压缩并且需要时间加载,你的问题是 LoadImage 方法在主线程锁定你的框架。截至今天(2017 年 8 月)还没有解决方案,但有请愿书添加此功能:feedback.unity3d.com/suggestions/…

标签: c# .net image algorithm unity3d


【解决方案1】:

不幸的是,没有简单的方法可以做到这一点。线程限制非常显着,UnityEngine 内置解码器不能轻易推到另一个线程。我尝试使用一些第三方代码进行解码/编码,这些代码可以在单独的线程中运行,但最终我的结果并不令人满意——C# Jpeg 代码慢得多,线程没有任何好处。你可以做的是编写一个 C++ 解码器插件,它只会传递一个指向解码纹理的指针,这样你应该能够卸载主线程,但它很难被称为简单

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2018-06-03
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2014-10-26
    • 2017-03-22
    • 2012-04-18
    • 1970-01-01
    相关资源
    最近更新 更多