C# 以RGB格式从文件加载位图(不带alpha)

C# 以RGB格式从文件加载位图(不带alpha),c#,bitmap,system.drawing,C#,Bitmap,System.drawing,我只想加载一个.BMP文件并获取24位RGB格式(或32位RGB格式)的位图对象 我尝试的所有方法都返回一个PixelFormat=Format32bppArgb的位图/图像对象。即使BMP当然没有阿尔法 new Bitmap(System.Drawing.Image.FromFile(fileName, true)); new Bitmap(fileName); 我目前通过将第一个对象复制到另一个24位RBG的内存位图来解决这个问题 有没有一种方法可以做到这一点 谢谢你把第一个对象复制到另一

我只想加载一个.BMP文件并获取24位RGB格式(或32位RGB格式)的位图对象

我尝试的所有方法都返回一个PixelFormat=Format32bppArgb的位图/图像对象。即使BMP当然没有阿尔法

new Bitmap(System.Drawing.Image.FromFile(fileName, true));
new Bitmap(fileName);
我目前通过将第一个对象复制到另一个24位RBG的内存位图来解决这个问题

有没有一种方法可以做到这一点


谢谢你把第一个对象复制到另一个对象到底是什么意思


要实现所需操作,即加载图像并将其转换为24位,只需获取与大小匹配的第二个位图(即RGB)的图形上下文,然后将原始位图绘制到此位图上。

您可以将其克隆为RGB格式:

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

据我所知,无法使用System.Drawing中的类指定用于加载位图的像素格式。要转换位图,请检查以下问题:

这是目前最重要的答案:

        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..
一种选择是将其放入一个函数中,该函数采用文件名和像素格式。这隐藏了丑陋的代码,它有起有落,因为它也隐藏了一个事实,那就是它可能没有那么有效


根据链接的SO问题,使用克隆方法并不总是有效。

为什么?格式化32bppargb有什么问题?