2014-02-07 3 views
1

말하면,이 Base64 이미지 문자열에서 이미지 파일 확장자를 모른다. webservice에서 반환.Base64 이미지 문자열을 이미지로 변환하는 방법과 사용할 파일 확장자

WinRT에서 어떻게 처리합니까?

  1. Base64 문자열을 이미지로 변환 한 후 사용할 이미지 파일 확장자 유형은 무엇입니까?

  2. 이 base64 이미지 문자열을 이미지로 변환하는 방법은 무엇입니까?

WebService를 사용하여 데이터 가져 오기;

foreach(var ws_item in Results) 
{ 
    InsertItems(ws_item.Picture , ws_item.No, ws_item.Description ....) 
} 

void InsertItems(string pictureB64String ,.....) 
{ 
    //-- for image : 

    string _strPicture = PictureB64String; 

    //-- convert this base64 string into image and store in a Folder call ImagesFolder 

    ConvertBase64ToImage(_strPicture) 
} 

void ConvertBase64ToImage(string strPic) 
{ 
} 
+0

글쎄, 당신이 시도 할 수있는 한 가지입니다 비트 맵 디코더 (BitmapDecoder)로 이미지를로드 한 다음 (어떤 종류의 이미지라도 처리 할 수 ​​있어야 함) 원하는 종류의 파일로 인코딩합니다. –

+0

이것은 Base64 문자열이 webservice에서 가져온 것입니다. 당신이 저에게 작업을 수행하는 방법을 보여 주시면 고맙겠습니다. – MilkBottle

+0

나는 너를 위해 그것을하지 않을 것이지만 그 단계들을 기술 할 것이다. 먼저 [BitmapDecoder 클래스] (http://msdn.microsoft.com/en-us/library/windows/apps/windows.graphics.imaging.bitmapdecoder.aspx)를 확인하십시오. 정적 인'CreateAsync' 메쏘드에 주목하십시오. 'Guid'를 받아들이지 않는 메소드를 읽으면 자동으로 적절한 디코더를 선택할 것입니다. 그런 다음 base64'문자열 '을'IRandomAccessStream'으로 변환합니다. 아마도 Windows 내장형 런타임 Interop 확장과 'CryptographicBuffer.CreateFromBase64String'을 사용하여이 작업을 수행 할 것입니다. –

답변

0

내가 먼저 바이트 배열에서 얻을 드 MIME 타입 후, 바이트 배열로 변환되고 변환 할 수있는 가장 좋은 방법은

샘플 추측 :

 byte[] image = Convert.FromBase64String(content); 
    string extensao = GetMimeFromBytes(image); 


public static int MimeSampleSize = 256; 

     public static string DefaultMimeType = "application/octet-stream"; 

     [DllImport(@"urlmon.dll", CharSet = CharSet.Auto)] 
     private extern static uint FindMimeFromData(
      uint pBC, 
      [MarshalAs(UnmanagedType.LPStr)] string pwzUrl, 
      [MarshalAs(UnmanagedType.LPArray)] byte[] pBuffer, 
      uint cbSize, 
      [MarshalAs(UnmanagedType.LPStr)] string pwzMimeProposed, 
      uint dwMimeFlags, 
      out uint ppwzMimeOut, 
      uint dwReserverd 
     ); 

     public static string GetMimeFromBytes(byte[] data) 
     { 
      try 
      { 
       uint mimeType; 
       FindMimeFromData(0, null, data, (uint)MimeSampleSize, null, 0, out mimeType, 0); 

       var mimePointer = new IntPtr(mimeType); 
       var mime = Marshal.PtrToStringUni(mimePointer); 
       Marshal.FreeCoTaskMem(mimePointer); 

       return mime ?? DefaultMimeType; 
      } 
      catch 
      { 
       return DefaultMimeType; 
      } 
     } 
관련 문제