unity3d 如何将保存的字符串文件转换为texture2D而不损失质量?

cig3rfwq  于 2023-03-03  发布在  其他
关注(0)|答案(1)|浏览(328)

当将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,而不改变图像的质量?(或者如果这是可能的话)

kr98yfug

kr98yfug1#

将Texture2D调用中的“linear”参数修改为false为我们解决了这个问题:

Texture2D texture = new Texture2D(width, height, TextureFormat.ARGB32, false, false);

相关问题