加载www的图像时的js压缩问题

时间:2015-11-26 11:16:58

标签: javascript unity3d

我尝试从服务器导入图像(统一)时出现压缩问题。

我有一个名为" glass"在unity中的资源文件夹中,我希望在运行时将此图像替换为服务器上的图像。我发现这个脚本http://docs.unity3d.com/ScriptReference/WWW.LoadImageIntoTexture.html用于导入图像并将其分配给我的" glass"图像。

唯一的问题是图像的压缩是(NPOT)RGBA压缩DXT5,而链接中的代码表示jpg&#39被压缩为DXT1。

你们有谁能告诉我,我做错了什么?

$app = require_once __DIR__.'/../../blog_files/bootstrap/start.php';

1 个答案:

答案 0 :(得分:0)

我运行了一些测试,对我来说它看起来像是一个Unity bug。

与文档相反,在LoadImageIntoTexture之前纹理格式是什么并且如果纹理被压缩,它总是DXT5。

以下是发生的事情:

  • 如果将图像加载到先前未压缩的纹理(例如RGB24)中,则生成的格式为未压缩的RGB24或ARGB32(取决于图像是否包含alpha通道)。
  • 如果将图像加载到先前压缩的纹理中,结果将是使用DXT5压缩的纹理。图像是否具有Alpha通道无关紧要。
  • 如果您使用www.texture而不是www.LoadImageIntoTexture,则结果始终为未压缩纹理(RGB24或ARGB32)。
  • 在未压缩纹理上手动调用Texture.Compress()会得到正确的格式(DXT1或DXT5取决于alpha通道)。

无论如何,这是一个解决方法:而不是使用

 www.LoadImageIntoTexture(Texture_1);

使用

 // Load uncompressed RGB24 or ARGB32 depending on alpha channel
 Texture_1 = www.texture;
 // Compress with the correct format
 Texture_1.Compress(true);

结果将是JPG的DXT1或PNG的DTX5,应该是。

P.S。这不是JS独有的,也是在C#中发生的。