1

C#を使ってルーペツールを作っています。これとよく似ています: http://colorsnapper.com 私は、個々のピクセルを表示するのに十分な、画面の事前定義された領域を拡大する方法を Google で検索しました。

より具体的には、マウスを画面上で拡大鏡にして、マウスが置かれている各ピクセルを強調するようにします。その事前定義された領域を拡大する方法を理解する必要があります。

私がこれを行う方法、または利用可能なAPIを知っている人はいますか?

更新 Microsoft が提供している倍率 API を見つけました: http://msdn.microsoft.com/en-us/library/windows/desktop/ms692402(v=vs.85).aspx ただし、この API は C++ です。私が収集したように、C++ は Windows OS が記述されているものであり、この API を使用するには、ある種の C# ラッパーを使用する必要があります。これは質問ではありません。他のユーザーのためにこの投稿に追加したいと思っただけです。

4

1 に答える 1

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 x 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);
}
于 2012-08-16T19:49:55.273 に答える