这段代码:
System.Drawing.Bitmap bpp24 = new System.Drawing.Bitmap(3, 3, System.Drawing.Imaging.PixelFormat.Format24bppRgb);
Console.WriteLine("bpp24 pixel format is " + bpp24.PixelFormat.ToString());
System.Drawing.Image bpp24image = bpp24;
Console.WriteLine("bpp24image pixel format is " + bpp24image.PixelFormat.ToString());
System.Drawing.Bitmap duplicate = new System.Drawing.Bitmap(bpp24image);
Console.WriteLine("duplicate pixel format is " + duplicate.PixelFormat.ToString());
System.Drawing.Bitmap clone = (System.Drawing.Bitmap)bpp24.Clone();
Console.WriteLine("clone pixel format is " + clone.PixelFormat.ToString());
产生这个输出:
bpp24 像素格式为 Format24bppRgb
bpp24image 像素格式为 Format24bppRgb
重复像素格式为 Format32bppArgb
克隆像素格式为 Format24bppRgb
为什么重复的 PixelFormat 发生了变化?真正复制 Bitmap 的解决方法似乎是最后显示的对象级 Clone 方法(和 Bitmap 级 Clone 方法,但这需要一些额外的输入),但为什么更高级别的 Bitmap(Image) 构造函数不能用于复制位图?
另请参阅Bitmap deep copy changed PixelFormat和Converting Bitmap PixelFormats in C#。