我正在使用 .resx 文件将图像嵌入到我的程序集中。在运行时,我需要将图像保存到独立文件中,恢复原始内容。如何从 System.Drawing.Bitmap 实例中提取原始文件流?我知道我可以使用 Bitmap.Save() 创建一个流,但这会转码(实际上是膨胀)图像,即使将 PNG 另存为 PNG 也是如此。
或者也许我的错误是首先从 Resource 读取它们作为 Bitmap?
请您参考如下方法:
是的,一旦您将其作为Bitmap 对象读取,就无法取回原始文件流。 Bitmap 对象仅包含未压缩的数据,不包含原始数据。
您应该以字节数据的形式读取资源。您可以从资源流中读取并写入文件:
using (Stream source = this.GetType().Assembly.GetManifestResourceStream("WindowsApplication1.filename.jpg")) {
using (FileStream dest = File.Create(fileName)) {
byte[] buffer = new byte[4096];
while (true) {
int len = source.Read(buffer, 0, buffer.Length);
if (len == 0) break;
dest.Write(buffer, 0, len);
}
}
}
注意:这需要将图像添加为嵌入式 资源,而不是托管 资源。您可以使用 Image.FromStream() 从中创建一个 Image。
