這裏似乎有許多圖片框問題,但我還沒有找到任何處理將圖片框的內容更改爲不是簡單地從文件加載的位圖的問題。如何將生成的位圖加載到PictureBox中?
我的應用程序需要一個字節數組,並從它們生成一個位圖。我真的想避免寫入文件作爲中間處理步驟。
因爲它是一個字節數組而不是2個字節的字,所以我需要用灰度調色板創建索引位圖。
然後,我將索引位圖轉換爲正常位圖(24位rgb)。
這是產生誤差爲我的代碼:
pictureBox1.Image = (System.Drawing.Image)bmp2;
當我觀看的形式(在PictureBox試圖繪製),該線程將簡單地停止執行與消息: 「無效參數在System.Drawing.Image.get_RawFormat()「
我在做什麼錯?我怎樣才能爲picturebox創建一個安全的位圖?
這是創建「BMP2」:如果我使用bmp1.Save(@「testfile.bmp」)
//creating the bitmap from the array
System.Drawing.Bitmap bmp1 = new System.Drawing.Bitmap(100, 100, 100, System.Drawing.Imaging.PixelFormat.Format8bppIndexed, MyIntPtr);
//creating a proper indexed palette
System.Drawing.Imaging.ColorPalette GrayPalette = bmp1.Palette;
for (int i = 0; i < GrayPalette.Entries.Length; i++)
{
GrayPalette.Entries[i] = Color.FromArgb(i, i, i);
}
bmp1.Palette = GrayPalette;
//creating a non-indexed, 24bppRGB bitmap for picturebox compatibility
System.Drawing.Bitmap bmp2 = new Bitmap(bmp1.Width, bmp1.Height, System.Drawing.Imaging.PixelFormat.Format24bppRgb);
Graphics gr = Graphics.FromImage(bmp2);
gr.DrawImage(bmp1, 0, 0);
gr.Dispose();
我得到的似乎是無異常的一個完全可以接受的位圖。
爲什麼我不能使用我的位圖作爲我的picturebox.Image? 在加載新位圖之前,我需要更改picturebox的其他參數嗎?
GC應該照顧內存。 – SLaks 2010-02-03 15:35:41
@SLaks:GC將處理內存,但不會釋放Bitmap對象使用的本地資源。有一個IDisposable接口的原因,使用它。 – 2010-06-22 22:28:51
@EdSwangren:**錯誤**。擁有本地資源的「IDisposable」對象會將本地資源置於終結器中。請參閱處理模式。 – SLaks 2010-06-22 22:54:17