我有如下的PNG图像数据,但我无法使用任何解码方法对其进行解码。
对此有所了解的人帮助我通过使用此编码/解码技术来获取图像。
"�PNG\r\n\u001a\n\0\0\0\rIHDR\0\0\u0013`\0\0\u001bf\u0001\0\0\0\0Nw�v\0\0 \0IDATx��O��H���(/�\u0017\u0006�b-tP\u001ej�U����4\u0005l)Y�}�Q\u001fa���9*\a���ڢgGo{\u001f\u0006\u001d_@@C��\u0004:,�\u001e�\t\u001d\u0004�\u001c�0��o\n*a �\u0019��6��I���H�����o�#\u007f\u000f\"#��iF��9iƗ\u00165\0\u0010\u0011=t\u0001��\u0003d\u0003d@6@\u0006d\u0003d@6@\u0006d\u0003d@6@\u0006d\u0003d@6@\u0006d\u0003d....
它拥有IHDR,IDAT,IEND等所有png关键组块。
//用于编码
byte[] buf = File.ReadAllBytes(@"C:\Users\GPL\Desktop\Newfolder\balloon_PNG4957.png");
var s = Encoding.ASCII.GetString(buf);
File.WriteAllText(@"C:\Users\GPL\Desktop\balloon_PNG4957.txt", s);
//用于解码
var rawdata = File.ReadAllText(@"C:\Users\GPL\Desktop\balloon_PNG4957.txt");
byte[] buf = Encoding.ASCII.GetBytes(rawdata);
var ms = new MemoryStream(buf);
var bitmap = Image.FromStream(ms); //Error
pictureBox1.Image = bitmap;
这里解码时我收到错误 - ""参数无效"。 "
答案 0 :(得分:0)
它被称为转义字符串文字
尝试这个(在st=
之后替换真实文本),如下所示:
string st= "�PNG\r\n\u001a\n\0\0\0\rIHDR\0\0\u0013`\0\0\u001bf...";
File.WriteAllBytes("png.png", st.Select(s => (byte) s).ToArray());
或只是将char
转换为char
:
var ba = new List<byte>();
foreach (var s in st)
{
ba.Add((byte) s);
}
File.WriteAllBytes("png.png", ba.ToArray());
注意:对于两个字节,Unicode字符在ba.Add((byte) (s>>8));
内使用另一个foreach
。
这就是您所需要的:C# escape characters in user input
请参阅:Can I convert a C# string value to an escaped string literal
如果是文件,您可以像这样阅读并在pictureBox1
内显示:
var bitmap = Image.FromFile(@"filename.png");
pictureBox1.Image = bitmap;
pictureBox1.SizeMode = PictureBoxSizeMode.StretchImage;
如果是Stream
或MemoryStream
或byte[]
,请使用此字段:
byte[] buf = File.ReadAllBytes(@"filename.png");
var ms=new MemoryStream(buf);
var bitmap = Image.FromStream(ms);
pictureBox1.Image = bitmap;
pictureBox1.SizeMode = PictureBoxSizeMode.StretchImage;
是ASCII编码:
byte[] buf = File.ReadAllBytes(@"filename.png");
var sb=new StringBuilder();
var s=Encoding.ASCII.GetString(buf );
textBox1.Text = buf.Length + @", " + s.Length;
File.WriteAllText("png.txt", s);