【问题标题】:saved bitmap is larger than the bitmap i read C#保存的位图大于我读取的位图 C#
【发布时间】:2011-12-18 18:42:42
【问题描述】:

实际上创建的位图的文件大小比输入位图大。我打开了创建的位图,它看起来与我输入的完全不同。这是为什么呢?

我通过 FileStream 读取位图,然后将其内容写入位图对象。接下来,我将其作为位图文件写入硬盘。我无法弄清楚为什么输出位图大于输入位图。谁能帮帮我。

【问题讨论】:

  • 我认为,默认情况下,c# 将转换为 png。我可能错了
  • 是的,它的png。 png格式不压缩图片吗?
  • 位图不是以 BMP 格式保存的,它将是 PNG,因为您没有指定 ImageFormat。而且您没有指定文件的完整路径,因此它可能最终位于您未预料到的目录中。环境.当前目录。我怀疑这至少是混乱的一部分。
  • @user581544虽然png一般是用flate压缩的,但是对于某些数据,压缩后的大小其实可以更大

标签: c# bitmap


【解决方案1】:

Bitmap.Save (Image.Save) 默认将图片保存为 PNG 格式。

如果你打电话给Save with an ImageFormat value,你应该得到你的位图。

b.Save("test.bmp", ImageFormat.Bmp);

【讨论】:

  • 嗨,我更新了我的问题。我将位图读取为 FileStream,然后创建一个位图对象并将读取的文件写入位图对象。接下来我将位图对象保存为位图文件。在这个过程中,我读取的文件与写入的文件不相等。
  • 嗯,bmp 格式非常简单,但可选信息标题之类的内容可能会发生变化。
【解决方案2】:

创建位图文件时,通常会在每行添加填充以确保每行是 4 字节的倍数。当您将位图文件读入 FileStream 时,也会读取填充。

这可能意味着 FileStream 比预期大,当您将其写入位图时,它会显示意外行为,因为当您将其写入新位图时,它会将填充视为您的图像数据。

【讨论】:

    【解决方案3】:

    抱歉,我没有很好地理解您的问题。但是你试过这样吗?

    private System.Drawing.Bitmap readfromFile(string filename)
        {
            FileStream fs = new FileStream(filename, FileMode.Open, FileAccess.Read);
            byte[] bytes = new byte[fs.Length];
            fs.Read(bytes, 0, Convert.ToInt32(fs.Length));
            MemoryStream ms = new MemoryStream(bytes);
            System.Drawing.Bitmap bmp = new System.Drawing.Bitmap(ms);
            return bmp;
        }
    

    并像这样保存:

    System.Drawing.Bitmap bmp = readfromFile("xxxx --- Path");
                    bmp.Save("test.bmp", ImageFormat.Bmp);
    

    我试过了,它总是为我返回相同的图像。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2014-09-10
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2013-10-08
      • 1970-01-01
      • 2016-04-05
      相关资源
      最近更新 更多