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



使用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);

这不会像它所说的那样编译 资源.狮子 不是一个字节[],但我认为它必须像资源一样。接下来我在位图中找到我可以拥有

Encoder.ColourDepth, 2

我认为这会起作用,但我无法弄清楚如何使用它,因为我尝试它不会编译。

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

我想我需要问那些比我聪明的人语法是什么才能让它工作,以便我可以将单色位图从资源复制到磁盘上的单色位图。

最后,一位同事提出了克隆我想要的资源"狮子"的建议。这奏效了。我使用的代码如下:

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);

相关内容

  • 没有找到相关文章

最新更新