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
我想在 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的初学者,所以解决这个问题并不容易..下面是我项目中的源代码示例。
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