2009-12-01 135 views

回答

3

也许尝试一些沿着这个方法的行:

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(); 
      } 
     } 

您可能需要惹的RenderTargetBitmap尺寸各地得到你想要的,但这应该把工作做好。您也可以使用不同的编码器,而不仅仅是JpegBitmapEncoder。

+2

[你不需要调用关闭作为配置将为你做。](http://stackoverflow.com/q/911408/299327) – 2013-04-12 20:34:43

0

德国,但有代码将FrameworkElement转换为可以轻松保存的System.Drawing.Image。 Link

+0

伟大的通用解决方案,但也许更容易从图像控件中获取图像,而不是渲染整个控件? :)感觉像太多:) – OregonGhost 2009-12-01 09:38:57

0

问题仍未得到解决,所以我会套用先前提供的示例:

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; 
} 

从那里,你可以使用由为System.Drawing.Image类提供的保存()方法中的一种。