2015-07-16 1 views

ответ

0

Извините, вот код, который работал на меня, не идеален. Не стесняйтесь просматривать, и если вы найдете что-нибудь, пожалуйста, сообщите об этом. Благодаря

В этом примере имя холст дисплей

private async Task<string> generateBase64Bitmap() 
    { 
     // Initialization 

     try 
     { 
      // Initialization. 
      Size canvasSize = this.Display.RenderSize; 
      Point defaultPoint = this.Display.RenderTransformOrigin; 
      // Sezing to output image dimension. 
      this.Display.Measure(canvasSize); 
      this.Display.UpdateLayout(); 
      this.Display.Arrange(new Rect(defaultPoint, canvasSize)); 
      // Convert canvas to bmp. 
      var bmp = new RenderTargetBitmap(); 
      await bmp.RenderAsync(this.Display, (int)(this.Display.ActualWidth/4), (int)(this.Display.ActualHeight/4)); 
      // Setting. 
      var bitmap = (RenderTargetBitmap) bmp; 

      //var bytes = (await bitmap.GetPixelsAsync()).ToArray(); 
      return await toBase64(bitmap); 

     } 
     catch (Exception ex) 
     { 
      //this.ShowMessage(ex.ToString(), "Error"); 
     } 
     return string.Empty; 
    } 


    private async Task<string> toBase64(RenderTargetBitmap bmp) 
    { 
     var img = (await bmp.GetPixelsAsync()).ToArray(); 

     var encoded = new InMemoryRandomAccessStream(); 
     var encoder = await BitmapEncoder.CreateAsync(
      BitmapEncoder.PngEncoderId, encoded); 
     encoder.SetPixelData(BitmapPixelFormat.Bgra8, BitmapAlphaMode.Straight, 
      (uint)bmp.PixelWidth, (uint)bmp.PixelHeight, 96, 96, img); 
     await encoder.FlushAsync(); 
     encoded.Seek(0); 

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

     return Convert.ToBase64String(bytes); 
    } 

Для вызова метода использования (добавить асинхронной в ваш метод):

string encodedImgBase64 = await generateBase64Bitmap(); 
Смежные вопросы