如何阅读.png文件并在TextBox中显示为文本?

时间:2014-07-17 21:59:34

标签: c#

我需要将.png文件作为字符串打开并将其放在文本框中。我试图通过此代码执行此操作:

 private void button1_Click(object sender, EventArgs e)
    {
        OpenFileDialog dialog = new OpenFileDialog();
        dialog.ShowDialog();
        text1.Text = dialog.FileName;
        string text = System.IO.File.ReadAllText(dialog.FileName);
        text2.Text = text;
    }

我需要进入我的多行文本框:

  

‰PNG       IHDR OŮ/ç%OsRGB®ÎégAMA±ŹüapHYsĂĂÇo¨d   (IDATx ^íť˝ŽŢF˛†'T°łUčĐá*ô,°'Zl˛€®b7t8-0B‡''(; 7Tb @ p $ ř«Ş9ŐĹźŻŮě˙®ŻŰ{H6«ş^5ÉŤžţ0ăÉÁŰĆ#,WXš*CĆxŰ0˛aEVv¶yۨ•ť&ˇÉŘ oFU¬5Ńć$cĽm”ÂrĄIX:čëŢ6ęałĄ)26ŔŰFKŘĽbiÚŚ đ¶a´yŰ…éJśť}ěí“/F×XŮŇ®čëŢŕŇÎFŘ”Ň}šäL/¶ľ=ń÷ĎĆ|,ÎŇ$çuq¶Młan|Ý4)3 «MĂ0®ŇŠ”™IR†'S:|jŮŰM] SA $$ {eŁŻx»ý; 5〜YC>˛@§i±5ÂŰŇőĹωMY   ·Ň“ľ^ŕmèU`ŇDĆxŰ0Ś®8'.;ŰĽml°Âčž3š?€6gĆ'p,+'EîłŃ6[«ŕ

但我只得到一个字:

  

PNG

拜托,帮助我!

2 个答案:

答案 0 :(得分:1)

不确定为什么要尝试这样做,但如果这是你真正想要的,你可以使用base64编码的字符串

Read a Image file:
Bitmap loadedBitmap = Bitmap.FromFile(dialog.Filename);
Image imgFile = Image.FromFile(dialog.Filename);


using (MemoryStream ms = new MemoryStream())
  {
    // Convert Image to byte[]
    image.Save(ms, format);
    byte[] imageBytes = ms.ToArray();

    // Convert byte[] to Base64 String
    string base64String = Convert.ToBase64String(imageBytes);
    text2.Text = base64String;
  }

当你正在读回那个字符串时,你可以反过来将ba​​se64编码的字符串转换为图像....

答案 1 :(得分:1)

最好使用BinaryReader读取二进制数据。要在TextBox中显示它们,您需要替换0x00字符,以免它破坏控件中的文本。

这将用'替换0x00字符。' :

using (BinaryReader br = new BinaryReader(File.Open(yourFile, FileMode.Open)))
{
    var data =  br.ReadChars  ((int)br.BaseStream.Length);
    StringBuilder sb = new StringBuilder();
    foreach (char c in data) 
             if ((int)c > 0) sb.Append(c.ToString()); else sb.Append(".");
    text2.Text = sb.ToString();
}

修改

如果修改最终作业,原始代码也会起作用:

text2.Text = text.Replace((char)0, '.');

说明:在C#中,字符串可以保存任意位模式;但旧的Winform TextBox仍然与C#之前的版本相同,可能是用C ++编写的,不能正确处理旧的字符串终止字符0x0。

虽然最初的问题不是File.ReadAllText的使用,但在您的工具箱中使用BinaryReader及其许多有趣的方法是非常值得的。

结果并非完全无用 - 我刚发现我的测试文件有嵌入式Photoshop ICC配置文件; - )