2011-02-11 104 views
0

我必須將32位rgb bmp圖像轉換爲24位rgb bmp。32位rgb bmp到C#中的24位rgb bmp問題

這就是我要做的

Bitmap b1=new Bitmap(sorecFileName); 

Bitmap b2=new 

Bitmap(b1.Size.Width,b1.Size.Height,System.Drawing.Imaging.PixelFormat.Format24bppRgb);  
b2.SetResolution(b1.HorizontalResolution, b1.VerticalResolution); 

Graphics g=Graphics.FromImage(b2); 

g.DrawImage(b1,0,0); 

//continue to draw on g here to add text or graphics. 

g.Dispose(); 

b2.Save(destinationFileName); 

代碼編譯罰款和24 bpp的生成的輸出圖像,但它不是RGB格式了。這是爲什麼?

我想通了,因爲我有一個庫,它將圖像輸入爲rgb24並顯示它。所以當我試圖將上面的代碼生成的文件作爲函數的輸入時,它會顯示噪聲圖像。

但是,如果我在paint中打開相同的文件並將其保存爲24bpp bmp,並將其輸入到該函數,則圖片顯示正常。我錯過了什麼?

回答

2
b2.Save(destinationFileName); 

您沒有指定圖像文件格式。默認值是PNG,而不是BMP。您現在可能在磁盤上有一個實際包含PNG圖像的.bmp文件。這可能會在一段時間內不被發現,很多圖形程序都會關注文件頭而不是文件擴展名。例如MSPaint將無法加載文件。就像任何其他使用GDI +的程序一樣。對於一個盲目假定該文件包含BMP並且根本不檢查的程序,您可能不那麼幸運。修復:

b2.Save(destinationFilename, System.Drawing.Imaging.ImageFormat.Bmp); 
+0

請改善此庫中的錯誤檢查。像這樣的不幸事件並不罕見,它將在某一天再次發生。 – 2011-02-11 11:29:36

0

,如果你有一個blackimage - 添加g.Clear(Color.White);