2016-02-03 148 views
0

我試圖灰度位圖(Format16bppGrayScale)轉換爲彩色位圖(Format32bppArgb)像這樣:改變位圖的PixelFormat從Format16bppGrayScale到Format32bppArgb - 內存溢出異常

Bitmap color = gray.Clone(new Rectangle(0, 0, gray.Width, gray.Height), PixelFormat.Format32bppArgb); 

我不斷收到一個System.OutOfMemoryException 。我一直在研究,當提供給克隆的矩形大於您要克隆的實際圖像時,通常會發生此錯誤。這不是這種情況,因爲我正在使用圖像尺寸來創建矩形。這種類型的轉換是否存在已知問題?有沒有其他方法可以在不同的PixelFormat中獲得副本?

謝謝,

+0

你有什麼形象的尺寸是多少? –

+0

圖像是628x468 – Pol

+1

只需使用1x1位圖執行此操作。你會發現GDI +例外的常見問題,它們**非常**誤導。這只是不被支持,16bppGrayScale是你會在醫院的放射成像部門使用的格式。賬單中包含硬件的成本。 Backgrounder答案[這裏是](http://stackoverflow.com/questions/2610416/is-there-a-reason-image-fromfile-throws-an-outofmemoryexception-for-an-invalid-i/2610506#2610506) –

回答

0

我看過,人們有像你這樣的問題。試試這種方式: 更改PixelFormat,當你嘗試克隆,系統有問題。 最大的原因是位圖的新定義。

Bitmap clone = new Bitmap(gray.Width, gray.Height, PixelFormat.Format32bppArgb); 
using (Graphics gr = Graphics.FromImage(clone)) { 
     gr.DrawImage(color, new Rectangle(0, 0, clone.Width, clone.Height)); 
} 

或者沒有drawImage方法:

using (Bitmap color = gray.Clone(new Rectangle(0, 0, gray.Width, gray.Height), PixelFormat.Format32bppArgb)) 
{ 
    // color is now in the desired format. 
} 
+0

感謝neiiic,我嘗試了兩個建議,我仍然得到相同的內存不足錯誤... – Pol