相同文件的大小差异,在WindowsXP&;Windows 7

本文关键字:WindowsXP amp Windows 文件 | 更新日期: 2023-09-27 18:24:28

我正在尝试将图像文件读取到流中。但当我在Windows XP和Windows 7上运行该程序时,流的长度有差异(两个系统上的图像文件相同)。这是我的代码:

private void ImageToStream(Stream stream, string imgPath)
{
   System.Drawing.Image img = null;
   img = System.Drawing.Image.FromFile(imgPath, true);
   img.Save(stream, img.RawFormat);
}

当然,我使用相同的图像在两个系统上进行测试。

文件系统是NTFS。当我把这张照片发布到网站上时,它在Windows7上运行良好,在WindowsXP上运行错误。我想知道在Windows 7和Windows XP中从流中读取图像有什么区别?

提前感谢!

相同文件的大小差异,在WindowsXP&;Windows 7

我已经解决了这个问题。

private void ImageToStream(Stream stream, string imgPath)
        {
            FileStream fileStream = new FileStream(imgPath,
                                    FileMode.Open, FileAccess.Read);
            byte[] buffer = new Byte[checked((uint)Math.Min(4096,
                                 (int)fileStream.Length))];
            int bytesRead = 0;
            while ((bytesRead = fileStream.Read(buffer, 0, buffer.Length)) != 0)
                stream.Write(buffer, 0, bytesRead);
        }

现在这两个系统都运行良好。我认为是因为Image.FromFile使用本机GDI调用来加载图像。我已经使用了新代码,它现在运行良好。

您似乎试图做的是从一个流复制到另一个流。这是一个非常简单的操作,当然不需要了解源流的内容。相反,你的代码会对图像进行解码,然后重新编码。没有理由会产生相同的文件。事实上,对于会导致质量损失的有损压缩算法。

相反,您需要做的只是将源流的内容直接复制到输出流。这个问题详细介绍了这个主题:如何将一个流的内容复制到另一个流?