2016-08-11 4 views
-1

У меня есть данные изображения PNG, как показано ниже, но я не могу его декодировать с помощью любого из методов декодирования.как получить изображение PNG из этих данных кодированного 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\[email protected]@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\[email protected]@\u0006d\[email protected]@\u0006d\[email protected]@\u0006d\[email protected]@\u0006d\u0003d.... 

В нем есть все критические блоки png, такие как IHDR, IDAT, IEND.

// Для кодирования

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

Это называется строка с экранированной линией

попробуйте это (Заменить реальный текст здесь после 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); 
+0

Спасибо за ответ Amd, я пытался всеми возможными способами он не получает новообращенный. он выбрасывает ошибку, как «Не найден компонент изображения, подходящий для завершения этой операции». Даже я пробовал с base64, PngBitmapEncoder ничего не помогло. – John

+0

@John: Это то, что вам нужно? –

+0

No Amd. Я хочу знать, какой тип кодированной строки ... ??? как получить изображение обратно путем декодирования этой строки .. ??? Его не файл изображения, его закодированные данные изображения png в виде строки. – John

Смежные вопросы