如何在C#中制作一个简单的放大镜

时间:2015-08-29 11:58:56

标签: c# magnify

我在"Creating a screen magnifier"的帖子中关注了以下内容。

因此我有这个代码。 它不是副本和贴在帖子上。我还添加了一个计时器,因此表单不是空白。 但是我发现了一些问题。

  1. 它不会放大很多。我想要一个更大的变焦。可调节的变焦设置将是最佳的,但如果我知道如何放大更多,我可以自己制作。
  2. 表单的中心并不总是像我想要的那样是光标的尖端。无论如何我可以解决这个问题吗?
  3. 这是我现在的代码。

    Graphics g;
    Bitmap bmp;
    private void Timer1_Tick(object sender, EventArgs e)
    {
        bmp = new Bitmap(250, 200);
        g = this.CreateGraphics();
        g = Graphics.FromImage(bmp);
        g.CopyFromScreen(MousePosition.X , MousePosition.Y , 0, 0, new Size(300, 300));
        pictureBox1.Image = bmp;
    }
    

    结果似乎与我在研究过程中发现的这个软件完全相同。the link,它带你到日本网页。

1 个答案:

答案 0 :(得分:1)

您必须使用示例中的各种数字来查看它们对输出的影响。它有助于将它们变成变量,因此您可以更轻松地使用它们。这是一个良好的开端,没有任何承诺,但它会给你一个开始实验的好地方,直到你得到你想要的东西。

Graphics g;
Bitmap bmp;
private void Timer1_Tick(object sender, EventArgs e)
{
    var endWidth = 300;
    var endHeight = 300;

    var scaleFactor = 2; //perhaps get this value from a const, or an on screen slider

    var startWidth = endWidth / scaleFactor;
    var startHeight = endHeight / scaleFactor;

    bmp = new Bitmap(startWidth, startHeight);

    g = this.CreateGraphics();
    g = Graphics.FromImage(bmp);

    var xPos = Math.Max(0, MousePosition.X - (startWidth/2)); // divide by two in order to center
    var yPos = Math.Max(0, MousePosition.Y - (startHeight/2));

    g.CopyFromScreen(xPos, yPos, 0, 0, new Size(endWidth, endWidth));
    pictureBox1.Image = bmp;
}