Bitmap.Save 出现 Null Exception 错误,但它已明确实例化

问题描述

升级到 Unity 和 Visual Studio 之前,我有一个简单的代码块,可以正常运行,但在更新之后完全相同的逻辑引发了 NullReferenceException

调用 BitMap.Save() 时引发异常,但我已验证所有输入均已正确实例化,并且我可以在调试期间检查所有关联对象,但无法识别任何空值。在这种情况下,NullReferenceException 非常不明确,我怀疑它与 Unity 的更新特别相关。

请不要像我的 What is a NullReferenceException,and how do I fix it? 一样关闭重复的“other”。这似乎是 Bitmap 的内部问题,我正在寻找有关如何解决此问题的具体指导。

Bitmap newBmp = new Bitmap(16,16);
for (int i= 0; i< 16; i++)
{
    for (int j= 0; j< 16; j++)
    {
         newBmp.SetPixel(i,j,Color.blue);
    }
}
using (MemoryStream ms = new MemoryStream())
{
    newBmp.Save(ms,ImageFormat.Bmp); // Null??
    // do more stuff with ms if it didn't crap out
}

异常详细信息,在 newBmp.Save() 上引发

注意:newBmpms 都不为空,并且上面的逻辑已将每个像素设置为蓝色。

NullReferenceException: Object reference not set to an instance of an object
System.Drawing.ComIStreamMarshaler+ManagedToNativeWrapper..cctor () (at <556bd4f081384ff9b1658a316bdf6616>:0)
Rethrow as TypeInitializationException: The type initializer for 'ManagedToNativeWrapper' threw an exception.
System.Drawing.ComIStreamMarshaler.MarshalManagedToNative (System.Object managedobj) (at <556bd4f081384ff9b1658a316bdf6616>:0)
System.Drawing.Image.Save (System.IO.Stream stream,System.Drawing.Imaging.ImageCodecInfo encoder,System.Drawing.Imaging.EncoderParameters encoderParams) (at <556bd4f081384ff9b1658a316bdf6616>:0)
System.Drawing.Image.Save (System.IO.Stream stream,System.Drawing.Imaging.ImageFormat format) (at <556bd4f081384ff9b1658a316bdf6616>:0)
(wrapper remoting-invoke-with-check) System.Drawing.Image.Save(System.I

解决方法

事实证明,我不久前加入 Unity 项目的 System.Drawing.dll 版本与新版本的 Unity 不兼容。我们通过删除 dll 并将“csc.rsp”文件添加到 Assets 文件夹并添加行 -r:System.Drawing.dll 来解决它,我认为它会自动使用适当的版本。