首页 > 解决方案 > 如何在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);

不能编译,因为它说 Resources.Lion is not a byte[] 但我认为它必须与资源中的一样。接下来我在 Bitmap 中找到我可以拥有

Encoder.ColourDepth, 2

我认为这可行,但我无法弄清楚如何使用它,因为每次尝试它都不会编译。

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

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

标签: c#.netbitmap

解决方案


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

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

推荐阅读