У меня есть небольшой участок кода на 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;
}
}
}
}
Допустим есть программа которая фоном делает определенные операции, не важно какие, допустим каждые 10 секунд собирает информацию по нагрузке...
Если открывается пустой файл, который не содержит данных, те
Сначала попробовал сделать так как в инструкции https://docsmicrosoft