在C#中转换位图PixelFormats

我需要将PixelFormat.Format32bppRgb的位图转换为PixelFormat.Format32bppArgb

我希望能够使用Bitmap.Clone,但似乎没有工作。

 Bitmap orig = new Bitmap("orig.bmp"); Bitmap clone = orig.Clone(new Rectangle(0,0,orig.Width,orig.Height), PixelFormat.Format24bppArgb); 

如果我运行上面的代码,然后检查clone.PixelFormat它被设置为PixelFormat.Format32bppRgb 。 发生了什么/如何转换格式?

马虎,GDI +并不罕见。 这解决了它:

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

出于某种原因,如果您从文件path创buildBitmap ,即Bitmap bmp = new Bitmap("myimage.jpg"); ,并调用Clone() ,返回的Bitmap将不会被转换。

但是,如果您从旧的Bitmap创build另一个Bitmap BitmapClone()将按预期工作。

尝试这样的事情:

 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(..); } 

应该这样工作。 也许你想在g上设置一些参数来定义质量等的插值模式