当将texture2D转换为字符串,然后从字符串转换回texture2D时,我注意到质量下降,颜色变浅。
我当前的设置(在播放模式下)如下:
- 对相机前面的任何物体进行截图
- 设置一个图像的精灵作为屏幕截图(屏幕截图显示罚款在这里)
- 将屏幕截图(texture2D)转换为字符串(这样可以保存)
- 将字符串转换回纹理2D
- 将图像的sprite设置为转换后的texture2D(这是图像看起来较亮且质量较低的地方)
下面是我用于转换的代码:
// Convert texture2D to string and return
public static string Texture2DToBase64(Texture2D texture)
{
byte[] data = texture.EncodeToPNG();
return Convert.ToBase64String(data);
}
// Convert string to texture2D and return
public static Texture2D Base64ToTexture2D(string encoded)
{
byte[] data = Convert.FromBase64String(encoded);
int width, height;
GetImageSize(data, out width, out height);
Texture2D texture = new Texture2D(width, height, TextureFormat.ARGB32, false, true);
texture.hideFlags = HideFlags.HideAndDontSave;
texture.filterMode = FilterMode.Point;
texture.LoadImage(data);
return texture;
}
static void GetImageSize(byte[] imageData, out int width, out int height)
{
width = ReadInt(imageData, 3 + 15);
height = ReadInt(imageData, 3 + 15 + 2 + 2);
}
static int ReadInt(byte[] imageData, int offset)
{
return (imageData[offset] << 8) | imageData[offset + 1];
}
下面是转换前屏幕截图的示例:
以下是转换后的同一屏幕截图示例:
我如何将屏幕截图(texture2D)转换为字符串,然后再转换回texture2D,而不改变图像的质量?(或者如果这是可能的话)
1条答案
按热度按时间kr98yfug1#
将Texture2D调用中的“linear”参数修改为false为我们解决了这个问题: