如何将图像保存到具有原始扩展名的磁盘



我使用以下代码在 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;                

看看 RenderTargetBitmap 和 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);

相关内容

最新更新