图像不能从字节数组转换

时间:2016-09-23 02:26:34

标签: c#

我有块代码:

        Image x = Image.FromFile(@"C:\Users\Tung\Pictures\Untitled.png");
        ImageConverter _imageConverter = new ImageConverter();
        byte[] xByte = (byte[])_imageConverter.ConvertTo(x, typeof(byte[]));

        StreamWriter sw = new StreamWriter("textfile.txt");
        string base64String =  System.Convert.ToBase64String(xByte,0,xByte.Length);
        sw.WriteLine(base64String);
        sw.Close();

        StreamReader sr = new StreamReader("textfile.txt");
        string line = sr.ReadToEnd();

        byte[] byteArray = Encoding.UTF8.GetBytes(line);
        MemoryStream stream = new MemoryStream(byteArray);
        sr.Close();

        File.WriteAllBytes("F:\\YourFile1.png", byteArray);
        File.WriteAllBytes("F:\\YourFile2.png", xByte);

运行后,YourFile1.png无法显示,而YourFile2.png显示正常。我不明白。你能救我吗?

1 个答案:

答案 0 :(得分:1)

这一行错了:

byte[] byteArray = Encoding.UTF8.GetBytes(line);

这里的line变量是base64编码的字符串,其中每个字符代表一个字节的3/4(6位用于编码64个可能的值)。但Encoding.UTF8.GetBytes()查看字符串中的每个字符并为每个字符生成一个完整的字节(对于非ascii字符更多,但是这里不会有这些字符)。它根本不解码base64数据。你需要这样做:

byte[] byteArray = Convert.FromBase64String(line);