当我从窗口设置放大时,它永远不会捕获精确的桌面屏幕。它只是缩放位图图片并向我们展示。
如何在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;
}
从上面的代码我得到缩放图片。
我想要的: - 这是原始显示的图片未缩放的图片(只是显示在桌面上的显示)
我想捕获桌面的屏幕,但放大窗口时屏幕的边界不正确。是否可以捕获其实际分辨率的屏幕截图而不是放大。它捕获右上角的屏幕
答案 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。