在过去一小时左右,我一直在为这个问题撕掉我的头发。
我有一些代码如下:
videoTile.Icon = new ImageSourceConverter().ConvertFrom(coDrivr4.Properties.Resources.Music.GetHbitmap()) as ImageSource;
当我运行我的代码时,它表示发生了NullReferenceException。 “音乐”和GetHbitmap()的返回都不为空。
我正在尝试通过属性获取图像,因为这是我弄清楚如何访问我的Resources文件夹中的图像的唯一方法。我只是将它们作为资源添加到app.xaml文件中,但由于某些原因我没有使用app.xaml文件。
我是否尝试过这个错误?我需要做的就是获取我的资源目录中的图像的ImageSource对象。我可以在我的XAML中使用它们,但不能在我的生活中使用任何代码。
P.S。:我不能只将它们作为资源添加到XAML文件中,因为这只是一个类,因此没有XAML文件。
答案 0 :(得分:9)
我遇到了完全相同的问题 - 我在一个漂亮的,静态类型的资源文件中得到了所有的位图,我只想用它们设置一个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
希望有所帮助。
答案 1 :(得分:5)
嗯,你有很多可能无效的东西。我建议你将它们分开:
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 beta 1中的错误。你实际上是在使用任何.NET吗? 4.0功能?我建议你尝试将只是那段代码提取到一个单独的项目中(你不需要显示API,只需转换图像。尝试在.NET 3.5中运行该代码。如果它以同样的方式失败,从可能的问题列表中消除了beta-ness。
答案 2 :(得分:3)
这不是.net Framework中的错误,这个空引用异常的发生是因为ImageSourceConverter无法转换Bitmap类型对象,它可以转换为:Stream,string,Uri,byte [],所以你必须更改你的代码这样的事情:
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;
}
答案 3 :(得分:1)
使用前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);
答案 4 :(得分:0)
尝试将coDrivr4.Properties.Resources.Music.GetHbitmap()
的返回值放入临时变量并查看它是否为空 - 这可能是您的null来源。