2017-10-13 120 views
0

我试图将裁切后的图像(和/或网格)转换为新的普通图像,但是在裁剪后,它会在相同位置返回,如何修复,我的工作方式裁剪通过裁剪获取新图像

enter image description here

private async void Save(object sender, RoutedEventArgs e) 
     { 
      RenderTargetBitmap renderTargetBitmap = new RenderTargetBitmap(); 
      await renderTargetBitmap.RenderAsync(GGrid, 4096 , 2448); 
      // IBuffer pixels = await renderTargetBitmap.GetPixelsAsync(); 
      IBuffer pixelBuffer = await renderTargetBitmap.GetPixelsAsync(); 
      FileSavePicker fileSavePicker = new FileSavePicker(); 
      fileSavePicker.SuggestedStartLocation = PickerLocationId.PicturesLibrary; 
      fileSavePicker.FileTypeChoices.Add("JPEG files", new List<string>() { ".png"}); 
      fileSavePicker.SuggestedFileName = "image"; 

      var outputFile = await fileSavePicker.PickSaveFileAsync(); 

      if (outputFile == null) 
      { 
       // The user cancelled the picking operation 
       return; 
      } 
      using (IRandomAccessStream stream = await outputFile.OpenAsync(FileAccessMode.ReadWrite)) 
      { 

       var encoder = await BitmapEncoder.CreateAsync(BitmapEncoder.PngEncoderId, stream); 
       encoder.SetPixelData(
        BitmapPixelFormat.Bgra8, 
        BitmapAlphaMode.Straight, 
        (uint)renderTargetBitmap.PixelWidth, 
        (uint)renderTargetBitmap.PixelHeight, 
        DisplayInformation.GetForCurrentView().LogicalDpi, 
        DisplayInformation.GetForCurrentView().LogicalDpi, 
        pixelBuffer.ToArray()); 
       try 
       { 

        await encoder.FlushAsync(); 
       } 
       catch (Exception err) 
       { 
        switch (err.HResult) 
        { 
         case unchecked((int)0x88982F81): //WINCODEC_ERR_UNSUPPORTEDOPERATION 
                 // If the encoder does not support writing a thumbnail, then try again 
                 // but disable thumbnail generation. 
          encoder.IsThumbnailGenerated = false; 
          break; 
         default: 
          throw err; 
        } 
       } 

       //if (encoder.IsThumbnailGenerated == false) 
       //{ 
       // await encoder.FlushAsync(); 
       //} 


      } 
     } 
+0

'GGrid'的内容是什么样的?你可以发布XAML和截图吗? – Laith

+0

我已经完成了它,谢谢,我只是更改XAML –

回答

0

enter image description here

程序后,您需要翻译和作物的位图。

double x,y,w,h; 

GGrid.RenderTransform = new TranslateTransform 
{ 
    X = -x, // translate back to origin (0,0) 
    Y = -y 
}; 

RenderTargetBitmap renderTargetBitmap = new RenderTargetBitmap(); 
await renderTargetBitmap.RenderAsync(GGrid, w, h); // use crop size 
+0

感谢您的答复,实际上它不会创建新的图像它只是改变位置,仍然有空的位置 –

+0

当您使用较小的尺寸时会发生什么? '等待renderTargetBitmap.RenderAsync(GGrid,400,300);'你看到更少的黑色空间了吗? – Laith

+0

我看到更多的黑色空间,它只是使图像更小 –