我正在使用C#制作放大镜工具。很像这个:http://colorsnapper.com 我在Google上搜索了一种放大屏幕预定义区域的方法,足以查看每个像素。
更具体地说,我希望我的鼠标成为屏幕上的放大镜,增强鼠标悬停在其上的每个像素。我需要弄清楚如何放大预定义的区域。
有没有人知道我可以这样做的方式,或任何可用的API。
的更新 的 我找到了Microsoft提供的Magnification API:http://msdn.microsoft.com/en-us/library/windows/desktop/ms692402(v=vs.85).aspx但是,这个API是用C ++编写的。正如我所收集的那样,C ++是Windows操作系统的编写者,要使用这个API,我需要使用某种C#包装器。这不是一个问题,我只是想我会为其他用户添加这篇文章。
答案 0 :(得分:5)
您可以将屏幕捕获到内存中的位图:
/// <summary>
/// Saves a picture of the screen to a bitmap image.
/// </summary>
/// <returns>The saved bitmap.</returns>
private Bitmap CaptureScreenShot()
{
// get the bounding area of the screen containing (0,0)
// remember in a multidisplay environment you don't know which display holds this point
Rectangle bounds = Screen.GetBounds(Point.Empty);
// create the bitmap to copy the screen shot to
Bitmap bitmap = new Bitmap(bounds.Width, bounds.Height);
// now copy the screen image to the graphics device from the bitmap
using (Graphics gr = Graphics.FromImage(bitmap))
{
gr.CopyFromScreen(Point.Empty, Point.Empty, bounds.Size);
}
return bitmap;
}
然后拍摄图像的一部分,也许是以鼠标位置为中心的50px乘50px矩形:
portionOf = bitmap.Clone(new Rectangle(pointer.X - 25, pointer.Y - 25, 50, 50), PixelFormat.Format32bppRgb);
将其显示在以鼠标位置为中心的100px×100px矩形中。这将为您提供2倍的缩放级别。 (显示尺寸)/(捕获尺寸)的比率越大,放大的越多。有点像:
[DllImport("User32.dll")]
public static extern IntPtr GetDC(IntPtr hwnd);
[DllImport("User32.dll")]
public static extern void ReleaseDC(IntPtr hwnd, IntPtr dc);
void OnPaint()
{
IntPtr desktopDC = GetDC(IntPtr.Zero); // Get the full screen DC
Graphics g = Graphics.FromHdc(desktopDC); // Get the full screen GFX device
g.DrawImage(portionOf, pointer.X - 50, pointer.Y - 50, 100, 100); // Render the image
// Clean up
g.Dispose();
ReleaseDC(IntPtr.Zero, desktopDC);
}