|
using System;
using System.Windows;
using System.Windows.Interop;
using System.Windows.Media;
using System.Windows.Media.Imaging;
namespace ReflectionStudio.Controls.Helpers
{
public static class VisualHelper
{
public static BitmapImage PngBitmap(Visual visualSrc, Visual visualDest)
{
// Get height and width
int width = (int)(double)visualDest.GetValue(FrameworkElement.ActualWidthProperty);
int height = (int)(double)visualDest.GetValue(FrameworkElement.ActualHeightProperty);
return PngBitmap(visualSrc, width, height);
}
/// <summary>
/// Returns the contents of a WPF Visual as a Bitmap in PNG format.
/// </summary>
/// <param name="visual">A WPF Visual.</param>
/// <returns>A GDI+ System.Drawing.Bitmap.</returns>
public static BitmapImage PngBitmap(Visual visual, int widthDest, int heightDest)
{
// Get height and width
int width= (int)(double)visual.GetValue(FrameworkElement.ActualWidthProperty);
int height = (int)(double)visual.GetValue(FrameworkElement.ActualHeightProperty);
// Render
RenderTargetBitmap rtb = new RenderTargetBitmap( width, height, 96, 96, PixelFormats.Default);
rtb.Render(visual);
// Encode
PngBitmapEncoder encoder = new PngBitmapEncoder();
encoder.Frames.Add(BitmapFrame.Create(rtb));
System.IO.MemoryStream stream = new System.IO.MemoryStream();
encoder.Save(stream);
BitmapImage myImage = new BitmapImage();
myImage.BeginInit();
myImage.StreamSource = stream;
if (widthDest != 0)
{
myImage.DecodePixelWidth = widthDest;
myImage.DecodePixelHeight = heightDest;
}
myImage.EndInit();
return myImage;
//// Create Bitmap
//Bitmap bmp = new Bitmap(stream);
//stream.Close();
//return bmp;
}
/// <summary>
/// Returns the contents of a WPF Visual as a BitmapSource, e.g.
/// for binding to an Image control.
/// </summary>
/// <param name="visual">A WPF Visual.</param>
/// <returns>A set of pixels.</returns>
//public static BitmapSource BitmapSource(this Visual visual)
//{
// Bitmap bmp = visual.PngBitmap();
// IntPtr hBitmap = bmp.GetHbitmap();
// BitmapSizeOptions sizeOptions = BitmapSizeOptions.FromEmptyOptions();
// return Imaging.CreateBitmapSourceFromHBitmap(
// hBitmap,IntPtr.Zero,Int32Rect.Empty,sizeOptions);
//}
}
}
|
By viewing downloads associated with this article you agree to the Terms of Service and the article's licence.
If a file you wish to view isn't highlighted, and is a text file (not binary), please
let us know and we'll add colourisation support for it.
WPF and MVVM fan, I practice C # in all its forms from the beginning of the NET Framework without mentioning C ++ / MFC and other software packages such as databases, ASP, WCF, Web & Windows services, Application, and now Core and UWP.
In my wasted hours, I am guilty of having fathered C.B.R. and its cousins C.B.R. for WinRT and UWP on the Windows store.
But apart from that, I am a great handyman ... the house, a rocket stove to heat the jacuzzi and the last one: a wood oven for pizza, bread, and everything that goes inside
https://guillaumewaser.wordpress.com/
https://fouretcompagnie.wordpress.com/