我正在尝试将图像文件读取到流中。但当我在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中从流中读取图像有什么区别?
提前感谢!
我已经解决了这个问题。
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调用来加载图像。我已经使用了新代码,它现在运行良好。
您似乎试图做的是从一个流复制到另一个流。这是一个非常简单的操作,当然不需要了解源流的内容。相反,你的代码会对图像进行解码,然后重新编码。没有理由会产生相同的文件。事实上,对于会导致质量损失的有损压缩算法。
相反,您需要做的只是将源流的内容直接复制到输出流。这个问题详细介绍了这个主题:如何将一个流的内容复制到另一个流?