2012-06-26 57 views
1

我正在使用以下代碼來獲取wpf中的圖像源代碼(圖像類型爲System.Windows.Controls.Image)。我想將這個圖像存儲到磁盤上,它有原始的擴展名,可以嗎?如何將圖像保存爲具有原始擴展名的磁盤?

System.drawing.image規定保存方法是否有類似於System.windows.controls.image

Image image=new Image(); 
BitmapImage bitmap = new BitmapImage(); 
bitmap.BeginInit(); 
bitmap.UriSource = new Uri(openFileDlg.FileName); 
bitmap.EndInit();    
image.Source = bitmap;     
+1

有關如何將圖像保存到(文件)流的信息,請參見[BitmapEncoder](http://msdn.microsoft.com/en-us/library/ms619208)(和派生類)。 MSDN提供了大量的代碼示例。 – Clemens

回答

2

看看和BitmapEncoder類。

下面的實用工具類可以讓您保存您的Image作爲光柵圖形圖像,根據所選擇的格式:

public static class VisualToImg 
{ 

    static VisualToImg() 
    { 
     DPI = 96; 
     PixelFormat = PixelFormats.Default; 
    } 

    public enum eImageFormat 
    { Bitmap, Png, Gif, Jpeg, Tiff, Wmp } 

    static public bool SaveAs(FrameworkElement element, String filePath, 
     eImageFormat imageFormat) 
    { 
     switch (imageFormat) 
     { 
      case eImageFormat.Bitmap: 
       return SaveUsingEncoder(element, filePath, new BmpBitmapEncoder()); 
      case eImageFormat.Gif: 
       return SaveUsingEncoder(element, filePath, new GifBitmapEncoder()); 
      case eImageFormat.Jpeg: 
       return SaveUsingEncoder(element, filePath, new JpegBitmapEncoder()); 
      case eImageFormat.Png: 
       return SaveUsingEncoder(element, filePath, new PngBitmapEncoder()); 
      case eImageFormat.Tiff: 
       return SaveUsingEncoder(element, filePath, new TiffBitmapEncoder()); 
      case eImageFormat.Wmp: 
       return SaveUsingEncoder(element, filePath, new WmpBitmapEncoder()); 
     } 

     return false; 
    } 

    static public double DPI 
    { get; set; } 

    static public PixelFormat PixelFormat 
    { get; set; } 

    static private bool SaveUsingEncoder(FrameworkElement visual, string filePath, 
     BitmapEncoder encoder) 
    { 
     try 
     { 
      RenderTargetBitmap bmp = new RenderTargetBitmap((int)visual.ActualWidth, 
       (int)visual.ActualHeight, DPI, DPI, PixelFormat); 

      bmp.Render(visual); 
      encoder.Frames.Add(BitmapFrame.Create(bmp)); 

      using (var stream = File.Create(filePath)) 
      { encoder.Save(stream); } 

      return true; 
     } 
     catch (Exception) 
     { return false; } 
    } 

} 

你也可以用它來保存你的Image或任何其他FrameworkElement

VisualToImg.SaveAs(image, "image1.png", VisualToImg.eImageFormat.Png); 
VisualToImg.SaveAs(image, "image2.bmp", VisualToImg.eImageFormat.Bitmap); 
VisualToImg.SaveAs(image, "image3.jpeg", VisualToImg.eImageFormat.Jpeg); 
+0

非常感謝,您的解決方案完美工作。有沒有什麼辦法可以擴展用於圖像源的圖像文件? – user913359

+0

是的,看看[這](http://stackoverflow.com/a/1397541/995246),或者只是做一個搜索。 – gliderkite

相關問題