我开发了一个用于保存纹理(屏幕截图)的应用程序,我需要对其进行压缩,但是-我无法使用EncodeToPNG
method来在屏幕上显示图像。
我的步骤:
Texture2D tex = new Texture2D(recwidth, recheight, TextureFormat.RGB24, false);
// RGB24-由于下一步:
tex.ReadPixels(rex, rdPXX, rdPXY); tex.Apply();
tex.Compress(false);
稍后,我需要使用-
var bytes = tex.EncodeToPNG();
但是我不能,因为众所周知EncodeToPNG
,不支持压缩纹理,该怎么办?我的手机占用很多空间
您必须先对其解压缩,然后再对其使用EncodeToPNG
。您应该可以使用RenderTexture
。复制压缩Texture2D
到RenderTexture
。分配RenderTexture
,RenderTexture.active
然后用于ReadPixels
将像素从像素复制RenderTexture
到Texture2D
您希望采用解压缩格式的新像素。现在,您可以使用EncodeToPNG
它了。
辅助函数可以做到这一点:
public static class ExtensionMethod
{
public static Texture2D DeCompress(this Texture2D source)
{
RenderTexture renderTex = RenderTexture.GetTemporary(
source.width,
source.height,
0,
RenderTextureFormat.Default,
RenderTextureReadWrite.Linear);
Graphics.Blit(source, renderTex);
RenderTexture previous = RenderTexture.active;
RenderTexture.active = renderTex;
Texture2D readableText = new Texture2D(source.width, source.height);
readableText.ReadPixels(new Rect(0, 0, renderTex.width, renderTex.height), 0, 0);
readableText.Apply();
RenderTexture.active = previous;
RenderTexture.ReleaseTemporary(renderTex);
return readableText;
}
}
用法:
创建一个压缩的纹理:
Texture2D tex = new Texture2D(recwidth, recheight, TextureFormat.RGB24, false);
tex.ReadPixels(rex, rdPXX, rdPXY);
tex.Apply();
tex.Compress(false);
从压缩的纹理创建一个新的解压缩的纹理:
Texture2D decopmpresseTex = tex.DeCompress();
编码为png
var bytes = decopmpresseTex.EncodeToPNG();
本文收集自互联网,转载请注明来源。
如有侵权,请联系 [email protected] 删除。
我来说两句