2015-12-24 169 views
0

的辅助方法,我用的都是....如何将图像转换为C#base64string

private async Task<string> ToBase64(byte[] image, uint height, uint width, double dpiX = 96, double dpiY = 96) 
    { 
     var encoded = new InMemoryRandomAccessStream(); 
     var encoder = await BitmapEncoder.CreateAsync(BitmapEncoder.PngEncoderId, encoded); 
     encoder.SetPixelData(BitmapPixelFormat.Bgra8, BitmapAlphaMode.Straight, height, width, dpiX, dpiY, image); 
     await encoder.FlushAsync(); 
     encoded.Seek(0); 

     var bytes = new byte[encoded.Size]; 
     await encoded.AsStream().ReadAsync(bytes, 0, bytes.Length); 

     return Convert.ToBase64String(bytes); 
    } 

    private byte[] ImageToByteArray(WriteableBitmap wbm) 
    { 
     using (Stream stream = wbm.PixelBuffer.AsStream()) 
     using (MemoryStream memoryStream = new MemoryStream()) 
     { 
      stream.CopyTo(memoryStream); 
      return memoryStream.ToArray(); 
     } 
    } 

,其拍摄的图像,并转换为可写的位图的代码是

WriteableBitmap image; 
     FileOpenPicker openPicker = new FileOpenPicker(); 
     openPicker.ViewMode = PickerViewMode.Thumbnail; 
     openPicker.SuggestedStartLocation = PickerLocationId.PicturesLibrary; 
     openPicker.FileTypeFilter.Add(".jpg"); 
     openPicker.FileTypeFilter.Add(".jpeg"); 
     openPicker.FileTypeFilter.Add(".png"); 
     StorageFile file = await openPicker.PickSingleFileAsync(); 
     if (file != null) 
     { 
      var bitmp = new BitmapImage(); 
      // Application now has read/write access to the picked file 
      var filePath = await file.OpenReadAsync(); 
      bitmp.SetSource(filePath); 
      proPic.Source = bitmp; 
      using (IRandomAccessStream stream = await file.OpenAsync(FileAccessMode.ReadWrite)) 
      { 
       image = new WriteableBitmap(1, 1); 
       image.SetSource(stream); 
      } 
      imageT = await ToBase64(ImageToByteArray(image), 100, 100, 96, 96); 
      pic = 1; 
     } 
     else 
     { 
      //OutputTextBlock.Text = "Operation cancelled."; 
     } 

当我比较我从助手方法获得的base64string与http://www.dailycoding.com/utils/converter/imagetobase64.aspx 两者不一样。

回答

0

改变文件到в的base64

public async Task<string> GetBase64(string name) 
     { 
      StorageFolder folder = ApplicationData.Current.LocalFolder; 
      StorageFile file = await folder.GetFileAsync(name); 
      var fileContent = new ByteArrayContent(System.IO.File.ReadAllBytes(file.Path)); 

      byte[] fileBytes = null; 
      using (var stream = await file.OpenReadAsync()) 
      { 
       fileBytes = new byte[stream.Size]; 
       using (var reader = new DataReader(stream)) 
       { 
        await reader.LoadAsync((uint)stream.Size); 
        reader.ReadBytes(fileBytes); 
       } 
      } 

      return Convert.ToBase64String(fileBytes); 
     } 
+0

它没有工作要么 – KartheekJ