[英]ImageSourceConverter throws a NullReferenceException … why?
在過去一小時左右的時間里,我一直在為這個問題撕掉我的頭發。
我有一些代碼如下:
videoTile.Icon = new ImageSourceConverter().ConvertFrom(coDrivr4.Properties.Resources.Music.GetHbitmap()) as ImageSource;
當我運行我的代碼時,它表示發生了NullReferenceException。 “音樂”和GetHbitmap()的返回都不為空。
我試圖通過屬性獲取圖像,因為這是我弄清楚如何訪問我的Resources文件夾中的圖像的唯一方法。 我只是將它們作為資源添加到app.xaml文件中,但由於某些原因我沒有使用app.xaml文件。
我試錯了嗎? 我需要做的就是獲取我的資源目錄中的圖像的ImageSource對象。 我可以在我的XAML中使用它們,但不能在我的生活中使用任何代碼。
PS:我不能只將它們作為資源添加到XAML文件中,因為這只是一個類,所以沒有XAML文件。
我遇到了完全相同的問題 - 我在一個漂亮的,靜態類型的資源文件中得到了所有的位圖,我只想用它們設置一個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
希望有所幫助。
那么你有很多東西可以在那里無效。 我建議你將它們分開:
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。
這不是.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;
}
在使用之前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()
的返回值放入臨時變量中,看看它是否為空 - 這可能是您的null來自的地方。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.