【发布时间】:2014-08-20 15:10:14
【问题描述】:
我正在使用以下代码来测试创建位图并将其保存为 TIFF 文件。代码运行良好,但在我的一台计算机上,生成的 TIFF 产生的 MD5 哈希值与我在其上运行代码的其他几台计算机上不同。所有机器上的图像看起来都相同,但由于某种原因,文件略有不同。用十六进制编辑器检查,看起来差别只有页脚中的 4 个字节。我使用 LinqPad 执行了下面的代码。结果如下:
CPU 1 (Windows 7) Hash: 7A-F7-F4-C5-1A-02-10-D5-FC-C9-40-A1-4F-18-D7-FE
Others (Windows 7/8) Hash: 0D-5D-23-58-2F-DE-D5-B3-CB-73-31-E1-37-CF-32-3C
这里是测试代码:
void Main()
{
using(var bmp = new Bitmap(100, 100))
{
using(var g = Graphics.FromImage(bmp))
{
g.FillRectangle(Brushes.Blue, 10, 10, 80, 80);
}
using(var ms = new MemoryStream())
{
SaveBitmapAsTIFFToStream(ms, bmp);
ms.Position = 0;
var provider = new MD5CryptoServiceProvider();
string hash = BitConverter.ToString(provider.ComputeHash(ms));
Console.WriteLine(hash);
}
}
}
public static void SaveBitmapAsTIFFToStream(Stream stream, Bitmap b)
{
b.Save(stream, FindEncoder(ImageFormat.Tiff), null);
}
private static ImageCodecInfo FindEncoder(ImageFormat fmt)
{
return ImageCodecInfo.GetImageEncoders()
.FirstOrDefault(info1 => info1.FormatID.Equals(fmt.Guid));
}
关于为什么会发生这种情况的任何想法?
【问题讨论】:
-
单机是否一致?因为 TIFF 格式为can contain a timestamp。 (对不起,如果这是一个愚蠢的问题:))
-
@Rawling:是的,哈希值是一致的。谢谢。
-
两台机器上的.NET Framework版本一样吗?
-
@user3643376:是的,框架版本是一样的。
-
我想建议尝试检查编解码器属性:msdn.microsoft.com/it-it/library/…