我要做的是将图像转换为字节数组,然后将该字节数组写入文件。下面是代码
public static byte[] Convert(Image img)
{
using (MemoryStream ms = new MemoryStream())
{
img.Save(ms, System.Drawing.Imaging.ImageFormat.Gif);
// or whatever output format you like
return ms.ToArray();
}
}
public Form1()
{
InitializeComponent();
Bitmap pic = new Bitmap("tulips.jpg");
pictureBox1.Image = pic;
byte[] img_array;
img_array = Convert(pic);
File.WriteAllBytes("test.txt", img_array);
}
现在我已经成功地将图像转换为字节数组。我已经通过断点检查了字节数组中的值,它们都是有效的。
然而,当我尝试将数组写入文件然后打开文件时,我看到的都是垃圾。
我错过了什么吗?
您的Bitmap
是Image
。当您可以简单地调用Save
(这里有文档)时,为什么要将其转换为byte
数组
Bitmap pic = new Bitmap("tulips.jpg");
pictureBox1.Image = pic;
pic.Save("test.gif", System.Drawing.Imaging.ImageFormat.Gif);
要操作图像,您通常会访问pixel data
-您现在拥有的包含文件类型头以及像素!参见Bitmap.LockBits
来操作像素(这里有文档)
您确定要使用图像查看器打开文件吗?.txt
扩展通常会导致用文本编辑器打开它。由于图像文件的格式是二进制的,因此可以预期,当您将其呈现为文本时,只会看到"垃圾"。如果您在保存文件时使用正确的扩展名.gif
,将会有所帮助。
File.WriteAllBytes("test.gif", img_array);
你以为会看到什么?您正在将字节数组保存到文本文件中。当你打开一个含有图像文件字节的文本文件时,你不可能得到一个好的结果。
确保您将文件保存为正确的类型,然后看看会发生什么