2009-12-01 8 views

Répondre

3

Peut-être essayer quelque chose le long des lignes de cette méthode:

private void SaveImageToJPEG(Image ImageToSave, string Location) 
     { 
      RenderTargetBitmap renderTargetBitmap = new RenderTargetBitmap((int)ImageToSave.Source.Width, 
                      (int)ImageToSave.Source.Height, 
                      100, 100, PixelFormats.Default); 
      renderTargetBitmap.Render(ImageToSave); 
      JpegBitmapEncoder jpegBitmapEncoder = new JpegBitmapEncoder(); 
      jpegBitmapEncoder.Frames.Add(BitmapFrame.Create(renderTargetBitmap)); 
      using (FileStream fileStream = new FileStream(Location, FileMode.Create)) 
      { 
       jpegBitmapEncoder.Save(fileStream); 
       fileStream.Flush(); 
       fileStream.Close(); 
      } 
     } 

Vous pourriez avoir besoin de retoucher les tailles RenderTargetBitmap pour obtenir ce que vous voulez, mais cela devrait faire le travail. Vous pouvez également utiliser des encodeurs différents de JpegBitmapEncoder.

+2

[Vous n'avez pas besoin d'appeler à proximité car disposer le fera pour vous.] (Http://stackoverflow.com/q/911408/299327) –

0

allemand, mais il y a du code pour convertir un FrameworkElement en un System.Drawing.Image qui peut être facilement sauvegardé. Link

+0

Grande solution polyvalente, mais peut-être est-il plus facile de sortir l'image d'un contrôle Image, plutôt que de rendre le contrôle entier? :) On dirait trop :) – OregonGhost

0

La question est toujours sans réponse, donc je vais paraphraser l'exemple fourni précédemment:

public System.Drawing.Image ConvertControlsImageToDrawingImage(System.Windows.Controls.Image imageControl) 
{ 
    RenderTargetBitmap rtb2 = new RenderTargetBitmap((int)imageControl.Width, (int)imageControl.Height, 90, 90, PixelFormats.Default); 
    rtb2.Render(imageControl); 

    PngBitmapEncoder png = new PngBitmapEncoder(); 
    png.Frames.Add(BitmapFrame.Create(rtb2)); 

    Stream ms = new MemoryStream(); 
    png.Save(ms); 

    ms.Position = 0; 

    System.Drawing.Image retImg = System.Drawing.Image.FromStream(ms); 
    return retImg; 
} 

De là, vous pouvez utiliser l'un des Save() méthodes fournies par la classe System.Drawing.Image.

Questions connexes