Как сделать снимок экрана с помощью элемента управления WPF?
Я создал приложение WPF, используя элемент управления WPF Bing. Я хотел бы иметь возможность скриншотов только контролировать Bing-карты.
Использует этот код, чтобы сделать снимок экрана:
// Store the size of the map control int Width = (int)MyMap.RenderSize.Width; int Height = (int)MyMap.RenderSize.Height; System.Windows.Point relativePoint = MyMap.TransformToAncestor(Application.Current.MainWindow).Transform(new System.Windows.Point(0, 0)); int X = (int)relativePoint.X; int Y = (int)relativePoint.Y; Bitmap Screenshot = new Bitmap(Width, Height); Graphics G = Graphics.FromImage(Screenshot); // snip wanted area G.CopyFromScreen(X, Y, 0, 0, new System.Drawing.Size(Width, Height), CopyPixelOperation.SourceCopy); string fileName = "C:\\myCapture.bmp"; System.IO.FileStream fs = System.IO.File.Open(fileName, System.IO.FileMode.OpenOrCreate); Screenshot.Save(fs, System.Drawing.Imaging.ImageFormat.Bmp); fs.Close();
Моя проблема:
- Как сделать все элементы управления пропорционально пропорционально изменяемыми, когда окно максимизируется?
- В чем разница между ContentControl и ContentPresenter?
- Виртуализация WPF DataGrid с группировкой
- Неправильно ли использовать Диспетчер в моей модели ViewModel?
- Почему обновление привязки не реализует INotifyPropertyChanged?
Width
и Height
кажутся плохими (ложные значения). Созданный снимок экрана использует плохие координаты.
Мой скриншот:
Что я ожидаю:
Почему я получаю этот результат? Я попытался в режиме Release, и без Visual Studio результат будет таким же.
- Изображение кнопки мыши WPF
- Как повысить свойства Измененные события в зависимости от свойства?
- Проблема с привязкой DependencyProperty
- Можно ли использовать другой шаблон для выбранного элемента в WPF ComboBox, чем для элементов в раскрывающемся списке?
- WPF ContextMenu woes: Как установить DataContext для ContextMenu?
- Хостинг внешнего приложения в окне WPF
- Как передать значения (параметры) между страницами XAML?
- Как установить стиль WPF Window Style в app.xaml?
Снимок экрана – это изображение экрана … все на экране. Вы хотите сохранить изображение из одного UIElement
и вы можете сделать это с RenderTargetBitmap.Render
метода RenderTargetBitmap.Render
. Этот метод принимает входной параметр Visual
и, к счастью, это один из базовых classов для всех UIElement
s. Предположим, что вы хотите сохранить файл .png, вы можете сделать это:
RenderTargetBitmap renderTargetBitmap = new RenderTargetBitmap(width, height, 96, 96, PixelFormats.Pbgra32); renderTargetBitmap.Render(yourMapControl); PngBitmapEncoder pngImage = new PngBitmapEncoder(); pngImage.Frames.Add(BitmapFrame.Create(renderTargetBitmap)); using (Stream fileStream = File.Create(filePath)) { pngImage.Save(fileStream); }