У меня есть небольшой участок кода на Winforms ,который я хочу перенести на WPF. Нужно получить картинку своего экрана. Я пытался заменить Bitmap на WriteableBitmap. Но как быть с Graphics и BinaryFormatter?
Bitmap bmp = new Bitmap(Screen.PrimaryScreen.Bounds.Width, Screen.PrimaryScreen.Bounds.Height, PixelFormat.Format32bppArgb);
Graphics gp = Graphics.FromImage(bmp);
gp.CopyFromScreen(0, 0, 0, 0, new Size(bmp.Width, bmp.Height));
BinaryFormatter bFormat = new BinaryFormatter();
bFormat.Serialize(ns, bmp);
gp.Dispose();
bmp.Dispose();
Подключи библиотеки System.Drawing и System.Windows.Forms
using System.Drawing.Imaging;
using System.IO;
using System.Windows.Media.Imaging;
namespace WpfApp1
{
public static class Screenshot
{
/// <summary>
/// Сделать снимок экрана.
/// </summary>
/// <param name="format">Формат, в котором вернуть изображение.</param>
/// <returns></returns>
public static BitmapImage CaptureScreen(ImageFormat format)
{
System.Drawing.Rectangle rect = new System.Drawing.Rectangle(new System.Drawing.Point(0, 0),
new System.Drawing.Size(System.Windows.Forms.Screen.PrimaryScreen.Bounds.Width,
System.Windows.Forms.Screen.PrimaryScreen.Bounds.Height));
return CaptureRect(rect, System.Drawing.Imaging.ImageFormat.Png);
}
/// <summary>
/// Сделать снимок определённой области изображения.
/// </summary>
/// <param name="rect">Прямоугольник, в котором будет сделан снимок.</param>
/// <param name="format">Формат изображения.</param>
/// <returns></returns>
public static BitmapImage CaptureRect(System.Drawing.Rectangle rect, ImageFormat format)
{
using (var ms = new System.IO.MemoryStream())
{
using (System.Drawing.Bitmap bitmap = new System.Drawing.Bitmap(rect.Width, rect.Height,
System.Drawing.Imaging.PixelFormat.Format32bppRgb))
{
using (System.Drawing.Graphics graphics = System.Drawing.Graphics.FromImage(bitmap))
{
graphics.CopyFromScreen(rect.X, rect.Y, 0, 0, rect.Size, System.Drawing.CopyPixelOperation.SourceCopy);
}
bitmap.Save(ms, format);
}
var image = new BitmapImage();
image.BeginInit();
image.CacheOption = BitmapCacheOption.OnLoad;
image.StreamSource = ms;
image.EndInit();
return image;
}
}
}
}
Продвижение своими сайтами как стратегия роста и независимости