C # как получить оригинальные границы экрана после масштабирования - PullRequest
0 голосов
/ 06 июня 2018

При увеличении масштаба из окна настройки он никогда не захватывает точный экран рабочего стола.просто увеличьте растровое изображение и покажите нам.

image

как я могу получить исходное изображение после zoomin Window.

Вот код: -

 private static BitmapSource CopyScreen()
    {
        BitmapSource BS = null;
        int screenLeft = SystemInformation.VirtualScreen.Left;
        int screenTop = SystemInformation.VirtualScreen.Top;
        int screenWidth = SystemInformation.VirtualScreen.Width;
        int screenHeight = SystemInformation.VirtualScreen.Height;
        using (Bitmap screenBmp = new Bitmap(screenWidth, screenHeight))
        {
            using (Graphics bmpGraphics = Graphics.FromImage(screenBmp))
            {
                bmpGraphics.CopyFromScreen(screenLeft, screenTop, 0, 0, screenBmp.Size);

                BS = Imaging.CreateBitmapSourceFromHBitmap(screenBmp.GetHbitmap(), IntPtr.Zero, Int32Rect.Empty, BitmapSizeOptions.FromEmptyOptions());

            }
        }


        return BS;
    }

Из вышеприведенного кода я получаю увеличенное изображение.
image

То, что я хочу: - это исходное отображаемое изображение, а не увеличенное изображение (только изображение, отображаемое на моем рабочем столе в том виде, как оно есть)

image

Я хочу сделать снимок экрана рабочего стола, но границы экрана не становятся правильными при увеличении окна.Можно ли сделать снимок экрана с его фактическим разрешением вместо увеличения. Захватывает экран верхнего правого угла

1 Ответ

0 голосов
/ 06 июня 2018

Это из-за параметров размеров в CreateBitmapSourceFromHBitmap.

Однако, если вам нужно только делать скриншоты, вам это не нужно, поскольку вы можете использовать растровое изображение следующим образом:

Bitmap screenshot = new Bitmap(
    SystemInformation.VirtualScreen.Width,
    SystemInformation.VirtualScreen.Height,
    PixelFormat.Format32bppArgb);

using (Graphics screenGraph = Graphics.FromImage(screenshot))
{
    screenGraph.CopyFromScreen(
        SystemInformation.VirtualScreen.X,
        SystemInformation.VirtualScreen.Y,
        0,
        0,
        SystemInformation.VirtualScreen.Size,
        CopyPixelOperation.SourceCopy);
}
screenshot.Save("screenshot.png");

Если вам действительно нужен источник битовых карт, вы можете использовать MemoryStream в любом формате, который вам нужен.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...