将Drawing.Image转换为Byte[]

16 浏览
0 Comments

将Drawing.Image转换为Byte[]

请问有人可以建议我如何将图片转换为字节数组,以及如何将字节数组转换回图片吗?\n我正在开发一个WPF应用程序,并使用流读取器。

0
0 Comments

问题的原因是提问者误以为他们可以通过读取图片的路径来将图片转换为字节数组。然而,他们的问题标记为WPF,这意味着没有理由认为它在服务器上运行并包含一个MapPath。而且,问题的陈述显示他们已经有了这张图片,没有理由从磁盘上读取它,甚至不能假设它一开始就在磁盘上。

要解决这个问题,应该直接将图片转换为字节数组,而不是通过读取图片的路径。以下是一种解决方法:

using System.Drawing;

using System.IO;

public byte[] ConvertImageToByteArray(Image image)

{

using (MemoryStream ms = new MemoryStream())

{

image.Save(ms, System.Drawing.Imaging.ImageFormat.Jpeg);

return ms.ToArray();

}

}

上述代码使用了System.Drawing命名空间中的Image和MemoryStream类。它将给定的Image对象保存到内存流中,并将其转换为字节数组。这样,你就可以直接从Image对象获取字节数组,而不需要读取图片的路径。

通过使用上述的代码,你可以将一个Drawing.Image对象转换为字节数组,而不需要通过读取图片的路径。这种方法更加简洁和高效,适用于WPF应用程序。

0
0 Comments

问题的出现是因为用户想要将一个Image对象转换成byte[]数组。用户提供了一个解决方法,即使用ImageConverter类的ConvertTo方法来实现转换。代码中的converterDemo方法接受一个Image对象作为参数,并将其转换为byte[]数组后返回。这个方法内部实例化了一个ImageConverter对象,然后调用ConvertTo方法将Image对象转换为byte[]数组。

然而,有一些用户对这个解决方法提出了疑问和改进建议。其中一个用户提到,转换后的byte[]数组可能包含不想要的附加元数据。为了去除元数据,用户建议创建一个新的Bitmap对象,并将Image对象传递给它,然后调用ConvertTo方法进行转换。代码中给出了示例:.ConvertTo(new Bitmap(x), typeof(byte[]));

另外,有一个用户在使用Visual Studio时遇到了问题,提示找不到ImageConverter类型。另一个用户回答说,ImageConverter类是System.Drawing命名空间的一部分,可能需要添加相应的引用。

还有一个用户询问转换后的byte[]数组中包含什么内容。另一个用户回答说,这个byte[]数组是图像的二进制表示,可以通过查找(反)序列化相关知识来了解更多。

最后,有一个用户怀疑这个解决方法是否适用于多页的TIFF文件。另一个用户回答说,这个方法也适用于多页的TIFF文件,但也提到了有一些专门用于处理TIFF文件的开源库可以使用。

用户想要将Image对象转换为byte[]数组,提供了一个使用ImageConverter类的解决方法。然而,还存在一些关于元数据和特定文件格式的疑问和改进建议。

0
0 Comments

问题的原因:上面的代码将一个图像转换成字节数组,但在重复转换几次后,开始出现奇怪的GDI+错误。这可能是因为代码中使用的方法在多次调用后出现问题。

解决方法:在上面的代码中,使用ImageConverter类可以避免这些错误。使用该类的示例代码可以在C# Image to Byte Array and Byte Array to Image Converter Class中找到。

此外,也可以考虑使用PNG格式的图像,因为现在它可能更好一些。

附注:转换后的字节数组可能包含不需要的附加元数据。要去除元数据,可以创建一个新的位图并将图像传递给它,例如:(new Bitmap(imageIn)).Save(ms, imageIn.RawFormat);

需要注意的是,对于MemoryStream来说,使用using语句是不必要的。可以像使用数组一样返回和使用MemoryStream。

0