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