Konvertera Bitmap PixelFormats i C#

Konvertera Bitmap PixelFormats i C#

Slarvigt, inte ovanligt för GDI+. Detta fixar det:

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...

Av någon anledning om du skapar en Bitmap från en filsökväg, dvs Bitmap bmp = new Bitmap("myimage.jpg"); , och ring Clone() på den, den returnerade Bitmap kommer inte att konverteras.

Men om du skapar en annan Bitmap från din gamla Bitmap , Clone() kommer att fungera som avsett.

Prova något sånt här:

using (Bitmap oldBmp = new Bitmap("myimage.jpg"))
using (Bitmap newBmp = new Bitmap(oldBmp))
using (Bitmap targetBmp = newBmp.Clone(new Rectangle(0, 0, newBmp.Width, newBmp.Height), PixelFormat.Format32bppArgb))
{
    // targetBmp is now in the desired format.
}

using (var bmp = new Bitmap(width, height, PixelFormat.Format24bppArgb))
using (var g = Graphics.FromImage(bmp)) {
  g.DrawImage(..);
}

Borde fungera så. Kanske vill du ställa in några parametrar på g för att definiera interpolationsläget för kvalitet etc.