【发布时间】: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