Привет У меня есть подпись, как это:Преобразование из DataUrl к изображению в C# и записать файл с байт
, который кодируется в 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.
Любые идеи?
Какая ошибка возникает у вас? – SLaks
Почему вы создаете MemoryStream? – SLaks
Это сбой на iOS или Android? И, спросите Слакс, спросите: зачем открывать поток и не использовать его? Вы уверены, что ваше имя файла установлено в действительное значение? – Jason