2009-12-01 167 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類提供的保存()方法中的一種。