Skip to main content
 首页 » 编程设计

c#之如何从 System.Drawing.Bitmap 对象中提取原始图像流

2024年01月29日28落叶

我正在使用 .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。