我想将gif文件转换为byte[]。
我试了两种方法,但结果不一样。哪一个是对的?
方法1:
使用CCD_ 1;这返回一个字节数组。
方法2:
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);
这两个字节有点不同。我应该信任哪一个?
您的"方法2"正在重新编码/重新压缩文件。它可能会有很大的不同,而且(很可能)质量会下降。
两者都是"正确的",因为它们是你告诉计算机做的事情的结果。一个是直接来自文件的字节数组,另一个是解码文件并重新编码的结果,这可能最终是完全相同的数组,或者大不相同。你想要的可能是第一个,因为它明显更快,因为它不需要经过解码/编码过程,并保留原始数据。我能想到使用第二个的唯一原因是,如果出于某种原因,您真的需要分析.NET gif编码过程的输出。
第二个选项与下面的选项相同,只是不需要临时文件,因为它在内存中执行所有操作。所以你所要做的就是加载它,然后保存它,然后再加载它。
Bitmap image = new Bitmap(@"c:1.gif");
image.Save("c:1_temp.gif", ImageFormat.Gif);
bytes = File.ReadAllBytes(@"c:1_temp.gif");