之前和之后的压缩纹理

Compressed textures before and after

我想用 Unity 制作一个程序,在分屏中左侧显示 .jpg 或 .png 图像,右侧显示压缩图像(ETC 或 DXT)。

我是这样解决的:

void CompressImage()
{
    original_image = new Texture2D(Screen.height, Screen.width, TextureFormat.ASTC_RGBA_12x12, false);
    GetComponent<Renderer>().material.mainTexture = original_image;
}

public void OnGUI()
{
    GUI.DrawTexture(new Rect(0, 0, original_image.height, original_image.width), original_image);
} 

我的压缩方式正确吗?当我尝试显示压缩图像时,看不到任何图像,只有一些随机颜色。

我是新手,如果有人能帮助我,那就太好了。 谢谢

您只能在编辑器中执行此操作。构建只能转换基本格式的纹理。

您可以使用Texture2D.Compress方法将纹理压缩成DXT格式, 或 EditorUtility.CompressTexture 以获得更多格式,但它仅在编辑器中可用。

您获得随机颜色是因为您创建了纹理但未向其中提供任何数据。所以在内存中你有垃圾。

编辑

Unity 正在从构建中剥离负责纹理压缩的代码,因为没有人使用它,它很慢而且构建必须尽可能小。如果你真的需要在你的构建中进行压缩,你必须自己实现它或者为它找到一个库。