如何在C#中将资源中的单色位图作为单色bmp复制到磁盘

时间:2018-10-18 08:28:17

标签: c# .net bitmap

使用WinForm,我在资源中有一个小的bmp文件,它只有黑白两种颜色,保存为Lion.bmp。我只需要两种颜色作为bmp。当用户单击按钮时,将出现一个对话框,询问他们要将其保存在何处。然后,我想将资源复制到该空间,但将其保存为两种颜色的bmp,​​就像原始资源一样。我设法将其保存为其他文件的所有形式,甚至保存为32位位图,但没有保存两个颜色位图。

首先,我以为我会逐字节复制,但据我所知这是不可能的。如果我知道怎么做,我可能会做。

下一步,我想我将创建一个新的位图并将其保存

 new Bitmap(Resources.Lion).Save(dialog.SelectedPath + "\\lion.bmp");

经过编译,我很高兴,直到我意识到我正在保存一个名为.bmp的PNG文件。接下来,我发现可以添加图像格式,所以我尝试

new Bitmap(Resources.Lion).Save(dialog.SelectedPath + "\\lion.bmp", ImageFormat.Bmp);

再次编译并保存一个文件,但是即使资源是单色的,它现在也将其保存为32位色深而不是2位。我接下来尝试将其写成字节流,这是我的原始计划

File.WriteAllBytes((dialog.SelectedPath + "\\lion.bmp"), Resources.Lion);

那不能编译,因为它表示Resources.Lion不是byte [],但我认为它必须与资源中的一样。接下来,我可以在位图中找到

Encoder.ColourDepth, 2

我认为这可以解决问题,但是我无法解决如何使用它的问题,因为我每次尝试时都无法编译。

new Bitmap(Resources.Lion).Save(dialog.SelectedPath + "\\lion.bmp", ImageFormat.Bmp, (Encoder.ColorDepth,2));

我想我想问问那些比我更聪明的人,使它起作用是什么语法,以便可以将单色位图从资源复制到磁盘上的单色位图。

1 个答案:

答案 0 :(得分:0)

最后,一位同事提出了克隆我想要的资源“ Lion”的建议。我使用的代码如下:

Resources.Lion.Clone(new Rectangle(0, 0, Resources.Lion.Width, Resources.Lion.Height),System.Drawing.Imaging.PixelFormat.Format1bppIndexed).Save(dialog.SelectedPath + "\\lion.bmp", ImageFormat.Bmp);