C#如何在缩放后获得orignal屏幕边界

时间:2018-06-06 10:24:25

标签: c# screen screen-orientation

当我从窗口设置放大时,它永远不会捕获精确的桌面屏幕。它只是缩放位图图片并向我们展示。

如何在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;
    }

从上面的代码我得到缩放图片。


我想要的: - 这是原始显示的图片未缩放的图片(只是显示在桌面上的显示)


我想捕获桌面的屏幕,但放大窗口时屏幕的边界不正确。是否可以捕获其实际分辨率的屏幕截图而不是放大。它捕获右上角的屏幕

1 个答案:

答案 0 :(得分:0)

这是因为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");

如果你真的需要一个bitmapsource,你可以使用你想要的任何格式的MemoryStream。