在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
Bitmap
, Clone()
将按预期工作。
尝试这样的事情:
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
上设置一些参数来定义质量等的插值模式