ASP.NET
Network Akademi

Met Hostimg

“Bilgi paylaşıldıkça artar” sloganı ile .NET Platformuna ilişkin birikimlerin paylaşıldığı ASP.NET.TR Topluluğunda sizde “YAZAR” olmak için ; info@asp.net.tr e-mail adresine kendinizi anlatan bir e-mail göndererek başvuruda bulunabilirsiniz.

WPF kontrollerinin görüntüsünü dosya olarak diske kaydetmek

Daron YÖNDEM
WPF
10.03.2010 17:17:03
Hit : 7116

Bugün karşılaştığım bir sorunun çözümünü sizinle paylaşmak istiyorum. Hazırladığım bir WPF uygulamasında ekranda bir şeyler çizdiriyordum ve sonrasında bu çizimin bir JPEG olarak kaydedilmesini sağlamam gerekiyordu. GDI'a girişerek tekrardan herşeyi bir BitmapImage içerisine çizdirmek istemedim :( Zaten baktığınızda WPF uygulamalarında varsayılan sınıflar arasında System.Drawing gelmiyor, ek olarak referans almak gerekiyor.

Peki nasıl halledebiliriz bu işi?

Aslında çözüm epey kolay. Ekranda görsel olarak gösterebildiğiniz herhangi bir Visual nesnesinin görselliğini alarak rahatlıkla diske bir Encoder aracılığı ile kaydedebiliyorsunuz.

[VB]

        Dim Genislik As Integer = 500

        Dim Yukseklik As Integer = 640

 

        'Genişlik, Yükseklik, Yatay ve Dikey DPI, Renk Derinliği verilir.

        Dim MyRender As New RenderTargetBitmap(Genislik, Yukseklik, 96, 96, PixelFormats.Pbgra32)

        'Görseli alınacak nesne Render metoduna verilir.

        MyRender.Render(Me)

 

        Dim Dosya As String = "C:\1.jpg"

 

        'İstenirse GifBitmapEncoder veya PngBitmapEncoder kullanılabilir.

        Dim Encoder As BitmapEncoder = New JpegBitmapEncoder()

        Encoder.Frames.Add(BitmapFrame.Create(MyRender))

 

        Using BirStream As System.IO.Stream = System.IO.File.Create(Dosya)

            Encoder.Save(BirStream)

        End Using

[C#]

            int Genislik = 500;

            int Yukseklik = 640;

 

            //Genişlik, Yükseklik, Yatay ve Dikey DPI, Renk Derinliği verilir.

            RenderTargetBitmap MyRender = new RenderTargetBitmap(Genislik, Yukseklik, 96, 96, PixelFormats.Pbgra32);

            //Görseli alınacak nesne Render metoduna verilir.

            MyRender.Render(this);

 

            string Dosya = "C:\\1.jpg";

 

            //İstenirse GifBitmapEncoder veya PngBitmapEncoder kullanılabilir.

            BitmapEncoder Encoder = new JpegBitmapEncoder();

            Encoder.Frames.Add(BitmapFrame.Create(MyRender));

 

            using (System.IO.Stream BirStream = System.IO.File.Create(Dosya))

            {

                Encoder.Save(BirStream);

            }

Kod içerisinde yazdığım açıklamalar sanırım detaylar için yeterli olacaktır. RenderTargetBitmap sınıfından aldığımız instance'ın Render metoduna verdiğimiz Visual tipindeki herhangi bir nesnenin görselliğini alarak istediğimiz bir Encoder tipi ile Encode edip diske rahatlıkla kaydedebiliyoruz.

Hepinize kolay gelsin.




BU İÇERİĞE YORUMDA BULUNUN


Bu MAKALE'ye yorum yapabilmek için Üye olmalısınız ...!


BU İÇERİĞE YAPILAN YORUMLAR