2017-10-13 6 views
0

Je suis en train de convertir mon image recadrée (et/ou Grille) en nouvelle image normale, mais elle revient comme elle recadrée, dans la même position, comment le réparer, il y a comment fonctionne ma programme après cultureObtenir une nouvelle image en recadrant

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

À quoi ressemble le contenu de 'GGrid'? Pouvez-vous poster XAML et capture d'écran? – Laith

+0

Je l'ai déjà fait, merci, je viens de changer XAML –

Répondre

0

enter image description here

Vous devez traduire et recadrer l'image.

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

merci pour la réponse, en fait il ne crée pas une nouvelle image il suffit de changer la position, et il reste encore de l'espace –

+0

Que se passe-t-il lorsque vous utilisez une taille plus petite? 'await renderTargetBitmap.RenderAsync (GGrid, 400, 300);' Voyez-vous moins d'espace noir? – Laith

+0

Je vois plus d'espace noir, il suffit de faire Image plus petite –