2014-12-30 5 views
8

Привет У меня есть подпись, как это:Преобразование из DataUrl к изображению в C# и записать файл с байт

enter image description here

, который кодируется в DataUrl конкретно эту строку:

"данные: изображение/PNG; base64, iVBORw0KGgoAAAANSUhEUgAAAZAAAADICAYAAADGFbfiAAAYlElEQVR4Xu2dC8w1R1nHQSCIgIKVGLmoiLciFwUs ... (длинная строка)"

Что я хочу сделать, это конвертировать этот DataUrl к PNG Има GE и сохранить изображение на устройстве, это то, что я делал до сих пор:

if (newItem.FieldType == FormFieldType.Signature) 
{ 
    if (newItem.ItemValue != null) 
    { 
      //string completeImageName = Auth.host + "/" + li[i]; 
      string path; 
      string filename; 
      string stringName = newItem.ItemValue; 

      var base64Data = Regex.Match(stringName, @"data:image/(?<type>.+?),(?<data>.+)").Groups["data"].Value; 
      var binData = Convert.FromBase64String(base64Data); 

      path = Environment.GetFolderPath(Environment.SpecialFolder.MyDocuments); 

      filename = Path.Combine(path, base64Data); 

      if (!File.Exists(filename)) 
      { 
       using (var stream = new MemoryStream(binData)) 
       { 
//Code crashing here-------------------------- 
         File.WriteAllBytes(filename, binData); 
        } 
      } 

     newItem.ItemValue = filename; 

    } 
} 

     App.Database.SaveReportItem(newItem); 

Но мой код делает мое приложение к сбою именно в этой линии:

File.WriteAllBytes (имя файла, binData);

Образец, который я использую в качестве ссылки (Link), использует PictureBox, но с Xamarin не используется pictureBox.

Любые идеи?

+0

Какая ошибка возникает у вас? – SLaks

+0

Почему вы создаете MemoryStream? – SLaks

+0

Это сбой на iOS или Android? И, спросите Слакс, спросите: зачем открывать поток и не использовать его? Вы уверены, что ваше имя файла установлено в действительное значение? – Jason

ответ

8

Как @SLaks упоминал, что я не нуждался в MemoryStream, проблема с моим кодом был путь и имя файла для дальнейшей помощи это рабочий код:

if (newItem.FieldType == FormFieldType.Signature) 
{ 
    if (newItem.ItemValue != null) 
    { 
     //string completeImageName = Auth.host + "/" + li[i]; 
     string path; 
     string filename; 
     string stringName = newItem.ItemValue; 

     var base64Data = Regex.Match(stringName, @"data:image/(?<type>.+?),(?<data>.+)").Groups["data"].Value; 
     var binData = Convert.FromBase64String(base64Data); 

     path = Environment.GetFolderPath(Environment.SpecialFolder.MyDocuments); 

     //filename = Path.Combine(path, base64Data.Replace(@"/", string.Empty)); 

     long milliseconds = DateTime.Now.Ticks/TimeSpan.TicksPerMillisecond; 
     string fileName = "Sn" + milliseconds.ToString() + ".PNG"; 
     filename = Path.Combine(path, fileName); 

     if (!File.Exists(filename)) 
     { 
      //using (var stream = new MemoryStream(binData)) 
      //{ 
       File.WriteAllBytes(filename, binData); 
      //} 
     } 

     newItem.ItemValue = filename; 

    } 
} 

App.Database.SaveReportItem(newItem); 

И изображение показало:

enter image description here

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

  • Нет связанных вопросов^_^