2014-12-30 6 views
8

안녕하세요 내가 가지고있는 바이트 파일을 C#으로 이미지에 DataUrl에서 변환 및 쓰기 같은 서명 :

하십시오 DataUrl에 구체적으로이 문자열을 인코딩

enter image description here

"데이터 : 이미지/PNG, Base64로, iVBORw0KGgoAAAANSUhEUgAAAZAAAADICAYAAADGFbfiAAAYlElEQVR4Xu2dC8w1R1nHQSCIgIKVGLmoiLciFwUs (긴 문자열)"

는 내가 뭘하고 싶은 것은 PNG - 지금이 DataUrl 변환입니다

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); 

하지만 내 코드를 내 응용 프로그램이 줄을 구체적으로 충돌하고있다 : GE는, 장치에 이미지를 저장, 이것은 내가 지금까지 뭘 오전입니다 (파일 이름

File.WriteAllBytes, binData);

참조 (Link)로 사용하고있는 샘플은 PictureBox를 사용하고 있지만 Xamarin에서는 pictureBox를 사용하지 않습니다.

어떤 아이디어? @SLaks 내가 MemoryStream을 필요하지 않았다 언급 한 바와 같이

+0

어떤 오류가 발생합니까? – SLaks

+0

MemoryStream을 만드는 이유는 무엇입니까? – SLaks

+0

iOS 또는 Android에서 충돌이 발생합니까? 그리고 물어 보는 SLaks에게 왜 스트림을 열고 그것을 사용하지 않겠 느냐고 물어보십시오. 파일 이름이 유효한 값으로 설정되어 있습니까? – Jason

답변

8

는, 내 코드의 문제는이 작업 코드 경로와 추가 도움 파일 이름이었다

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