2016-09-23 75 views
0

变换器我有块码:图像无法从字节数组

 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:'System.Convert.ToBase64String' – zerkms

+0

你能说更多吗? – Kay

+0

该方法有什么作用?用一些文本编辑器检查'YourFile1.png'的内容,问题就会很明显。 – zerkms

回答

1

这条线是错误的:

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

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

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

1/4,因为一个字节有256个可能的值,而base64字符每个都有64个......但它是键盘的一个小节,而且我已经在您发布时保存了修复程序。 –

+0

这取决于你用什么来衡量它。它是6位8 => 3/4(根据空间) – zerkms

+0

你是对的:o我需要睡觉:( –