簡體   English   中英

使用C#生成TIFF在不同的計算機上生成不同的文件

[英]Generating TIFF with C# produces different files on different machines

我正在使用以下代碼測試創建位圖並將其保存為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文件可以存儲大量數據和圖像信息。

我能夠在兩台不同的計算機上運行您的LinqPad程序,並且都返回了0D-5D哈希。 然后,通過更改在“控制面板”>“顯示”中找到的字體大小設置,我能夠在一台機器上重現MD5哈希值。 當我將字體設置為標准大小時,我得到了0D-5D哈希,而當我將字體設置為125%時,我得到了7A-F7哈希。 我猜測“ CPU 1”上的字體大小設置為125%,並且.NET必須在TIFF文件中編碼此信息。

System.Drawing命名空間中的大多數.NET類都依賴於非托管GDI +運行時。

自Windows XP以來,每個Windows操作系統均附帶不同版本的GDI +。 這些版本在解碼或編碼圖像時通常會產生不同的結果。 尤其是 TIFF圖像。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM