EncodeToJpg在移动设备上旋转和镜像

时间:2018-04-26 11:31:41

标签: android unity3d texture2d

所以我从相机插件中获取了Texture2D,一切都很好。 然后我将图像存储在设备的ROM中:

public static void AddImageAtt(Texture2D tex)
{
    if (tex == null) { return; }

    byte[] bytes = tex.EncodeToJPG();

    // Save full image on disk
    string name = System.DateTime.Now.ToString("yyyyMMddHHmmssfff") + ".jpg";
    string path = GetPathFromName(name);
    File.WriteAllBytes(path, bytes);
    bytes = null;
    Texture2D.Destroy(tex);
}

然后我可以稍后检索图像:

public static Texture2D GetMainImageFromName(string name)
{
    if(string.IsNullOrEmpty(name) == true) { return null; }
    string path = GetPathFromName(name);
    try
    {
        byte[] bytes = File.ReadAllBytes(path);
        Texture2D t = new Texture2D(1,1);
        t.LoadImage(bytes);
        t.Apply();
        return t;
    }catch { return null; }
}

Texture2D转到图像,但它在x轴上镜像并旋转90度。

现在我可以理解旋转,因为在拍照时我没有存储设备的方向,但镜像呢?

它在编辑器上工作正常。而且我无法手动设置比例和旋转,因为它用于滚动矩形并拧紧尺寸。

那为什么一切都错了?我尝试过EncodeToPng,它也是这样。

它发生在所有经过测试的Android设备上(其中大约10个来自不同的品牌和代)。

1 个答案:

答案 0 :(得分:0)

您可以存储镜像图像,但我认为它不是解决您问题的好方法。

您可以使用此代码镜像texture2D:

Texture2D FlipTexture(Texture2D original) {
    Texture2D flipped = new Texture2D(original.width,original.height);

    int xN = original.width;
    int yN = original.height;


    for (int i=0;i<xN;i++) {
        for (int j=0;j<yN;j++) {
            flipped.SetPixel(xN-i-1, j, original.GetPixel(i,j));
        }
    }
    flipped.Apply();

    return flipped;
}