2013-08-20 41 views
0


我有一個有線問題。我從Web控件(Awesomium)接收像素數據。 我想在PictureBox中顯示bipmap。Pixelbox在有效位圖上顯示錯誤圖像

using (System.Drawing.Bitmap bmp = new System.Drawing.Bitmap(viewPortX, viewPortY, System.Drawing.Imaging.PixelFormat.Format32bppArgb)) 
    { 
    BitmapData bmpData = bmp.LockBits(new Rectangle(0, 0, bmp.Width, bmp.Height), ImageLockMode.WriteOnly, bmp.PixelFormat); 
    BitmapSurface bmpSurface = (BitmapSurface)htmlHolder.Surface; 
    bmpSurface.CopyTo(bmpData.Scan0, bmpSurface.RowSpan, 4, false, false); 
    bmp.UnlockBits(bmpData); 

    bmp.Save("result.jpg", ImageFormat.Jpeg); 
    pictureBox.Load(result.jpg); 
    } 

這工作正常。位圖被顯示。 如果我改變

bmp.Save("result.jpg", ImageFormat.Jpeg); 
pictureBox.Load(result.jpg); 

pictureBox.Image = bmp; 

則eror圖像顯示在圖片框。
任何想法是什麼錯誤?
問候
克萊門斯·霍夫曼

+1

你不能使用'使用',它會配置位圖。 –

回答

1

,因爲你破壞BMP對象之前得到它的加載到圖片框。使用語句處理在其範圍內創建的圖像。

+0

'你在將圖片加載到圖片盒之前破壞bmp對象'是因爲'pictureBox.Image = bmp;'加載圖片引起的誤導。你怎麼能說'在它被加載之前'? –

+1

'PictureBox.Image'只是對分配給它的'Bitmap'的引用。 '使用'之後,'Bitmap'被'Disposed'並且'PictureBox'不能渲染Disposed的位圖,而不是拋出一個明顯的異常,紅色的'X'被渲染。 –

+0

對不起,如果它是誤導。英語不是我的第一語言,所以請原諒我的語言錯誤。我希望提問者明白我的答案。 –