我有块代码:
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显示正常。我不明白。你能救我吗?
答案 0 :(得分:1)
这一行错了:
byte[] byteArray = Encoding.UTF8.GetBytes(line);
这里的line
变量是base64编码的字符串,其中每个字符代表一个字节的3/4(6位用于编码64个可能的值)。但Encoding.UTF8.GetBytes()
查看字符串中的每个字符并为每个字符生成一个完整的字节(对于非ascii字符更多,但是这里不会有这些字符)。它根本不解码base64数据。你需要这样做:
byte[] byteArray = Convert.FromBase64String(line);