wmismail Posted June 12, 2009 Share Posted June 12, 2009 WPF kontrollerinin görüntüsünü dosya olarak diske kaydetmek... 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[/CODE][b][color=#0000FF][C#][/color][/b] [CODE] 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); }[/CODE]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.[right][i]Daron Yöndem[/i][/right] Link to comment Share on other sites More sharing options...
Recommended Posts
Archived
This topic is now archived and is closed to further replies.