Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/csharp/301.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/sql-server-2008/3.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# ImageSourceConverter引发NullReferenceException。。。为什么?_C#_Wpf_Resources - Fatal编程技术网

C# ImageSourceConverter引发NullReferenceException。。。为什么?

C# ImageSourceConverter引发NullReferenceException。。。为什么?,c#,wpf,resources,C#,Wpf,Resources,在过去一个小时左右的时间里,我一直在为这个问题焦头烂额 我有一些代码是这样的: videoTile.Icon = new ImageSourceConverter().ConvertFrom(coDrivr4.Properties.Resources.Music.GetHbitmap()) as ImageSource; var imageSourceConverter = new ImageSourceConverter(); byte[] tempBitmap = BitmapToByte

在过去一个小时左右的时间里,我一直在为这个问题焦头烂额

我有一些代码是这样的:

videoTile.Icon = new ImageSourceConverter().ConvertFrom(coDrivr4.Properties.Resources.Music.GetHbitmap()) as ImageSource;
var imageSourceConverter = new ImageSourceConverter();
byte[] tempBitmap = BitmapToByte(eventArgs.Frame);
ImageSource image = (ImageSource)imageSourceConverter.ConvertFrom(tempBitmap);
当我运行代码时,它说发生了NullReferenceException。“Music”和GetHbitmap()的返回值均不为null

我试图通过属性获取图像,因为这是我唯一知道如何访问资源文件夹中的图像的方法。我只想将它们作为资源添加到app.xaml文件中,但出于几个原因,我不使用app.xaml文件

我这样做是错误的吗?我所需要做的就是获取资源目录中的图像的ImageSource对象。我可以在我的XAML中很好地使用它们,但我不能在任何代码中使用它们


注意:我不能将它们作为资源添加到XAML文件中,因为这只是一个类,因此没有XAML文件。

尝试将
coDrivr4.Properties.Resources.Music.GetHbitmap()的返回值放入
输入一个临时变量,看看它是否为null——这可能就是null的来源。

好吧,这里有很多可能为null的东西。我建议你把它们分开:

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
中,我建议下一步是找出它是否是.NET4.0Beta1中的错误。您是否实际使用了.NET4.0的任何功能?我建议您尝试将这部分代码提取到单独的项目中(您不需要显示API,只需转换图像即可。尝试在.NET 3.5中运行该代码。如果以同样的方式失败,则可以从可能出现的问题列表中消除测试版。

我遇到了完全相同的问题-我将所有位图都放在一个漂亮的静态类型资源文件中,我只想用它们设置一个ImageSource。因此,si当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

希望对您有所帮助。

在使用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);

这不是.net Framework中的错误,发生此空引用异常是因为ImageSourceConverter无法转换位图类型的对象,它可以转换:流、字符串、Uri、字节[],因此您必须将代码更改为以下内容:

videoTile.Icon = new ImageSourceConverter().ConvertFrom(coDrivr4.Properties.Resources.Music.GetHbitmap()) as ImageSource;
var imageSourceConverter = new ImageSourceConverter();
byte[] tempBitmap = BitmapToByte(eventArgs.Frame);
ImageSource image = (ImageSource)imageSourceConverter.ConvertFrom(tempBitmap);


在完整的异常堆栈中必须有一些附加信息,您可能会这样认为,但实际上什么都没有。这是“将异常详细信息复制到剪贴板”的结果:System.NullReferenceException未处理消息=对象引用未设置为对象的实例。Source=PresentationCore StackTrace:在Sys位于System.ComponentModel.TypeConverter.ConvertFrom(对象值)的tem.Windows.Media.ImageSourceConverter.ConvertFrom(ITypeDescriptorContext上下文,CultureInfo区域性,对象值)位于coDrivr4.Conductor.PopulatedDefaultApplicationFiles()处在…InnerException中:我还应该指出,我正在运行VS2010和.NET 4.0。我不太确定这是否会造成很大的不同,但嘿,这是测试版。这并不是什么——这表明异常发生在ImageSourceConverter.ConvertFrom中,这强烈表明要么找不到资源,要么转换失败n以其他方式失败。特别是,它排除了以下可能性:1)videoTile为null;2)ConvertFrom返回null;3) ConvertFrom返回的是非ImageSource.Oh,它还证明了coDrivr4.Properties.Resources.Music不是null。换句话说,它排除了四种可能的错误来源。我要说的是,这比“实际上什么都没有”要多得多。根据调试器和我的快速代码测试,它绝对不是空的。这也不是空的。在“objectsource=…”行上抛出相同的错误。对-但重要的是我们已经确定它肯定在ConvertFrom中。诚然,我们已经从堆栈跟踪中看到了这一点……那么下一步是什么呢?我已经没有办法在这一点上测试出什么问题了。VS2012.NET 4.5,四年后问题仍然存在!请注意,imageSourceConverter.CanConvertFrom(iconBitmap.GetHbitmap().GetType());返回false,与这里讨论的所有其他类型相同。VS2013.NET 4.6,七年后,问题仍然存在。这可以完美地工作。ConvertFrom方法仍然抛出NullReferenceException,即使我传递的对象不是null(我使用Visual Studio调试器进行了双重检查)。在我的ValueConverter中工作得非常好。谢谢。调用
GetHbitmap
时,我遇到了一个非常奇怪的溢出错误。所以我改用你的方法,效果很好!非常感谢。