ImageSourceConverter抛出一个NullReferenceException ...

2019-07-29 04:34发布

我一直在撕裂我的头发,在这个问题上了一个小时左右。

我有一些代码,是这样的:

videoTile.Icon = new ImageSourceConverter().ConvertFrom(coDrivr4.Properties.Resources.Music.GetHbitmap()) as ImageSource;

当我运行我的代码,它说发生了一个NullReferenceException。 无论是“音乐”,也不GetHbitmap(返回)为空。

我试图通过属性来获得图像,因为它是我想通了如何访问我的资源文件夹的图像的唯一途径。 我只是将它们添加到App.xaml文件作为一种资源,但我不使用的几个原因的App.xaml文件。

我在尝试此错了吗? 所有我需要做的就是一个像我在我的资源目录的ImageSource的对象。 我可以用它们在我的XAML就好了,但不能为我的生命做它在任何代码。

PS:我不能只是添加它们作为一种资源来XAML文件,因为这仅仅是一个类,所以没有XAML文件。

Answer 1:

嗯,你已经得到了很多的事情可能在里面是空的。 我建议您将它们分离出来:

Bitmap bitmap = coDrivr4.Properties.Resources.Music;
object source = new ImageSourceConverter().ConvertFrom(bitmap.GetHbitmap());
ImageSource imageSource = (ImageSource) source;
videoTile.Icon = imageSource;

注意使用铸造,而不是的as运营商在这里。 如果source 不是 ImageSource ,这将引发InvalidCastException ,这将是远远超过刚刚结束了一个空引用更具描述性的。

编辑:好,现在我们肯定知道发生了什么事在ConvertFrom ,我建议下一步就是找出它是否是你真正使用任何.NET 4.0的功能在.NET 4.0测试版1中的错误? 我建议你尝试的代码只是位提取到一个单独的项目(你并不需要显示一个API,只是转换的图像。尝试在.NET 3.5上运行的代码,如果以同样的方式失败了,这是从消除可能出现的问题列表中的β-湖。



Answer 2:

我打了一模一样的问题 - 我有我的所有位图在一个不错的,静态类型的资源文件,我只是想设置一个ImageSource的他们。 因此,由于ImageSourceConverter被扔空引用例外,我改变了论调,使用这段代码来代替:

Bitmap bitmap = entityCol.EntityCollectionImage;
this.Image = System.Windows.Interop.Imaging.CreateBitmapSourceFromHBitmap(bitmap.GetHbitmap(), IntPtr.Zero, Int32Rect.Empty, BitmapSizeOptions.FromEmptyOptions()); // Image is an image source

希望帮助。



Answer 3:

这不是在.NET Framework中的一个错误,出现这种空引用异常,因为ImageSourceConverter不能将位图转换类型的对象,它可以转换:流,字符串,URI,字节[],所以你必须对你的代码更改为类似这个:

var imageSourceConverter = new ImageSourceConverter();
byte[] tempBitmap = BitmapToByte(eventArgs.Frame);
ImageSource image = (ImageSource)imageSourceConverter.ConvertFrom(tempBitmap);

...

private byte[] BitmapToByte(Bitmap bitmap)
{
    byte[] byteArray;
    using (MemoryStream stream = new MemoryStream())
    {
        bitmap.Save(stream, System.Drawing.Imaging.ImageFormat.Bmp);
        stream.Close();

        byteArray = stream.ToArray();
    }
    return byteArray;
}


Answer 4:

使用ConvertFrom之前保存您的位图的MemoryStream

Bitmap canvas = new Bitmap(secScreen.Bounds.Width, secScreen.Bounds.Height);
Graphics g = Graphics.FromImage(canvas);
g.Clear(System.Drawing.Color.Yellow);

MemoryStream stream = new MemoryStream ();
canvas.Save(stream, System.Drawing.Imaging.ImageFormat.Png);
ImageSource isrg = (ImageSource)new ImageSourceConverter().ConvertFrom(stream);


Answer 5:

尝试把返回值coDrivr4.Properties.Resources.Music.GetHbitmap()到一个临时变量,看看它是否是空-这也许就是你空的来源。



文章来源: ImageSourceConverter throws a NullReferenceException … why?
标签: c# wpf resources