2017-10-13 3 views
0

Ich versuche, mein zugeschnittenes Bild (und/oder Grid) in neue Normalbild zu konvertieren, aber es wie abgeschnitten, in der gleichen Position, wie es behoben wird, gibt es, wie funktioniert meine Programm nachHolen Sie sich ein neues Bild durch Zuschneiden

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

Wie sieht der Inhalt von 'GGrid' aus? Kannst du XAML und Screenshot posten? – Laith

+0

Ich habe es schon getan, danke, ich ändere nur XAML –

Antwort

0

enter image description here

beschneiden Sie müssen die Bitmap übersetzen und zu beschneiden.

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

danke für die Antwort, tatsächlich erstellt es kein neues Bild, es ändert nur die Position, und es immer noch leeren Raum –

+0

Was passiert, wenn Sie eine kleinere Größe verwenden? 'apply renderTargetBitmap.RenderAsync (GGrid, 400, 300);' Siehst du weniger schwarzen Raum? – Laith

+0

Ich sehe mehr schwarzen Raum, es macht nur Bild kleiner –