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

1 に答える 1

2

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);
于 2012-06-26T08:48:49.090 に答える