我一直在撕裂我的头发,在这个问题上了一个小时左右。
我有一些代码,是这样的:
videoTile.Icon = new ImageSourceConverter().ConvertFrom(coDrivr4.Properties.Resources.Music.GetHbitmap()) as ImageSource;
当我运行我的代码,它说发生了一个NullReferenceException。 无论是“音乐”,也不GetHbitmap(返回)为空。
我试图通过属性来获得图像,因为它是我想通了如何访问我的资源文件夹的图像的唯一途径。 我只是将它们添加到App.xaml文件作为一种资源,但我不使用的几个原因的App.xaml文件。
我在尝试此错了吗? 所有我需要做的就是一个像我在我的资源目录的ImageSource的对象。 我可以用它们在我的XAML就好了,但不能为我的生命做它在任何代码。
PS:我不能只是添加它们作为一种资源来XAML文件,因为这仅仅是一个类,所以没有XAML文件。
嗯,你已经得到了很多的事情可能在里面是空的。 我建议您将它们分离出来:
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上运行的代码,如果以同样的方式失败了,这是从消除可能出现的问题列表中的β-湖。
我打了一模一样的问题 - 我有我的所有位图在一个不错的,静态类型的资源文件,我只是想设置一个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
希望帮助。
这不是在.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;
}
使用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);
尝试把返回值coDrivr4.Properties.Resources.Music.GetHbitmap()
到一个临时变量,看看它是否是空-这也许就是你空的来源。