Bitmap.Save() 方法在 Unity 源代码中不起作用

Bitmap.Save() method is not working in Unity source

我想在 Unity 中实现 'Bitmap to Texture2D' 功能。

我学会了制作 Texture2D 实例,使用下面的语法。

// **LoadImage(byte[] arr)** can load byte array data and make Texture2D
var data = BitmapToByteMethod(bitmap);

var textureCanvas = new Texture2D(bitmap.Width, bitmap.Height, TextureFormat.ARGB32, false);
textureCanvas.LoadImage(data);
textureCanvas.Apply();

为了实现这个功能,我是这样做的。

using (MemoryStream memoryStream = new MemoryStream())
{
    ImageCodecInfo jpgEncoder = GetEncoder(ImageFormat.Jpeg);

    System.Drawing.Imaging.Encoder myEncoder = System.Drawing.Imaging.Encoder.Quality;
    EncoderParameters myEncoderParameters = new EncoderParameters(1);
    EncoderParameter myEncoderParameter = new EncoderParameter(myEncoder, 100L);
    myEncoderParameters.Param[0] = myEncoderParameter;

// this is the point error occurred.

    bitmap.Save(memoryStream, jpgEncoder, myEncoderParameters);
    //bitmap.Save(memoryStream, ImageFormat.Jpeg);
    return memoryStream.ToArray();
}

首先,我有一张位图图像。 第二,将位图转换为字节数组。 (它在我的 c# 示例项目中运行良好。)但是当我尝试 运行 Unity 中的该功能时,Unity 程序在执行 'Bitmap.Save()' 方法后关闭。

我是Unity的初学者,所以解决这个问题并不容易..下面是我项目中的源代码示例。

Unity3D 不支持

System.Drawing。可能是因为它基于 GDI+ 而 Unity 是多平台的,所以它只能在 Windows 上使用(Mono 有自己的 GDI+ 版本用于 *nix 系统,但它也不适用于 Unity)。官方的原因好像是"System.Drawing doesn't work with OpenGL/DirectX".

您似乎可以使用一些 hack 来完成这项工作,但只有在您想要坚持 Windows 时才有意义。如果您想这样做,Unity3D 论坛上的答案应该对您有所帮助 - http://answers.unity3d.com/answers/253571/view.html