簡體   English   中英

ImageSourceConverter拋出NullReferenceException ...為什么?

[英]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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM