使用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));
我想我想问问那些比我更聪明的人,使它起作用是什么语法,以便可以将单色位图从资源复制到磁盘上的单色位图。
答案 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);