0

我想将 gif 文件转换为 byte[]。

我尝试了两种方法,但结果不同。哪一种是对的?

方法一:

使用bytes =File.ReadAllBytes(filepath); 这将返回一个字节数组。

方法二:

 private byte[] ImageToBytes(Image image, ImageFormat format)
        {
            using (MemoryStream ms = new MemoryStream())
            {
                image.Save(ms, format);
                return ms.ToArray();
            }
        }

Bitmap image = new Bitmap(@"c:\\1.gif"); 

然后打电话
bytes = ImageToBytes(image, ImageFormat.Gif);

这两个字节有一点区别。我应该相信哪一个?

4

2 回答 2

1

您的“方法 2”正在重新编码/重新压缩文件。它可能有很大不同,并且(很可能)质量下降。

于 2013-07-24T01:42:19.350 回答
0

两者都是“正确的”,因为它们是您告诉计算机执行的操作的结果。一种是直接来自文件的字节数组,另一种是对文件进行解码并重新编码的结果,最终可能是完全相同的数组,也可能大相径庭。您想要的可能是第一个,因为它不经过解码/编码过程并保留原始数据,因此速度要快得多。我能想到使用第二个的唯一原因是,如果您出于某种原因确实需要分析 .NET gif 编码过程的输出。

第二个选项与下面的相同,除了不需要临时文件,因为它在内存中完成所有操作。所以你所做的就是加载它然后保存它然后再次加载它。

Bitmap image = new Bitmap(@"c:\1.gif"); 
image.Save("c:\1_temp.gif", ImageFormat.Gif);
bytes = File.ReadAllBytes(@"c:\1_temp.gif");
于 2013-07-24T03:14:54.690 回答