如何读取.png文件,并显示为文本框中的文本

本文关键字:文本 显示 文件 何读取 读取 png | 更新日期: 2023-09-27 18:13:20

我需要打开一个。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;
    }

我需要在多行文本框中添加如下内容:

‰PNGIHDR O Ů/ç%O sRGB®Îé gAMA±Źüa pHYs Ă ĂÇo¨d(IDATx ^我ť˝ŽŢF˛†' T°łUčĐ* o,°的Zl˛€®b7t8-0ˇB‡ľ"(;7美元tb@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/¶ľ=ń÷ĎƦ,我Ňcuq美元¶Mł¦Y4) 3«MĂ0®ŇŠ"™我؆ś:¦jŮŰM]Ś美元$ {eŁŻx»y; 5 ~ yĆ;˛@§我±5ŰŇőĹωm·Ň"ľ^ŕèU 'ŇDĆxŰ0Ś®8´。ŰĽ毫升°一čž3š?€6克Ćp +的EiłŃ6(«ŕ

但我只得到一个字:

PNG

请帮帮我!

如何读取.png文件,并显示为文本框中的文本

二进制数据最好用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配置文件;-)

不知道为什么你要这样做,但如果这是你真正想要的,你可以使用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;
  }

,当您读取该字符串返回时,您可以反向操作并将base64编码的字符串转换为图像....