我只是想加载一个.BMP文件并获取24位RGB格式的Bitmap对象(或RGB格式的32位)。
我尝试的所有方法都返回一个PixelFormat = Format32bppArgb的Bitmap / Image对象。即使BMP当然没有alpha。
new Bitmap(System.Drawing.Image.FromFile(fileName, true));
new Bitmap(fileName);
我目前通过将第一个对象复制到24位RBG的内存位图中来解决问题。
有没有一种方法可以做到?
由于
答案 0 :(得分:2)
据我所知,无法使用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问题,使用克隆方法并不总是有效。
答案 1 :(得分:1)
您可以将其克隆为RGB格式:
var bitmapInRgbFormat = loadedBitmap.Clone(new Rectangle(0, 0, loadedBitmap.Width, loadedBitmap.Height), PixelFormat.Format32bppRgb)
答案 2 :(得分:0)
将第一个对象复制到另一个是什么意思?
要实现您想要做的事情,意味着加载图像和将其转换为24位,只需获取与大小匹配的第二个位图的图形上下文,即RGB,并绘制原始位图到这一个。