2010-05-30 57 views
1

我只是想加載一個.BMP文件並獲取24位RGB格式(或RGB格式的32位)的位圖對象。從RGB格式的文件加載位圖(不帶alpha)

我試過的所有方法都返回一個PixelFormat = Format32bppArgb的Bitmap/Image對象。即使BMPs沒有alpha。

new Bitmap(System.Drawing.Image.FromFile(fileName, true)); 
new Bitmap(fileName); 

我目前通過在24位RBG中將第一個對象複製到另一個存儲器位圖來解決該問題。

有沒有一種方法可以做到這一點?

感謝

+1

爲什麼? Format32bppArgb有什麼問題? – SLaks 2010-05-30 22:24:02

回答

0

究竟你是什麼意思複製的第一個對象到另一個

達到你想要做的,這意味着加載圖像其轉換爲24位什麼,只是拿到的大小相匹配的第二位圖的圖形上下文,這是RGB,和油漆原始的位圖到這個一。

1

您可以將其克隆到RGB格式之一:

var bitmapInRgbFormat = loadedBitmap.Clone(new Rectangle(0, 0, loadedBitmap.Width, loadedBitmap.Height), PixelFormat.Format32bppRgb) 
1

至於我可以告訴它是不可能指定使用System.Drawing中的類裝載位圖的PixelFormat。要轉換的位圖檢查這個問題:Converting Bitmap PixelFormats in C#

這是目前最頂級的答案有:

 Bitmap orig = new Bitmap(@"c:\temp\24bpp.bmp"); 
     Bitmap clone = new Bitmap(orig.Width, orig.Height, System.Drawing.Imaging.PixelFormat.Format32bppPArgb); 
     using (Graphics gr = Graphics.FromImage(clone)) { 
      gr.DrawImage(orig, new Rectangle(0, 0, clone.Width, clone.Height)); 
     } 
     // Dispose orig as necessary.. 

一種選擇將是把在其中一個文件名和一個的PixelFormat功能。這隱藏了醜陋的代碼,它有其起伏,因爲它隱藏了它可能不那麼高效的事實。

根據使用克隆方法的鏈接SO問題並不總是有效。