C# 屏幕截图程序过载RAM

C# 屏幕截图程序过载RAM,c#,C#,因此,我对C#比较陌生,我想使用一个应用程序,向您显示悬停在上面的像素的颜色,但使用这段代码似乎有一个大问题。 谢谢你的帮助 守则: private void timer1_Tick(object sender, EventArgs e) { b = null; b = Screenshot(); Color color = b.GetPixel(Cursor.Position.X, Cursor.Position.Y); label1.Text = color.

因此,我对C#比较陌生,我想使用一个应用程序,向您显示悬停在上面的像素的颜色,但使用这段代码似乎有一个大问题。 谢谢你的帮助 守则:

private void timer1_Tick(object sender, EventArgs e)
{
    b = null;
    b = Screenshot();
    Color color = b.GetPixel(Cursor.Position.X, Cursor.Position.Y);
    label1.Text = color.Name;
    label2.Text = Cursor.Position.Y.ToString() + Cursor.Position.X.ToString();
}

private Bitmap Screenshot()
{
    Bitmap Screen = new Bitmap(SystemInformation.VirtualScreen.Width,SystemInformation.VirtualScreen.Height);
    Graphics g = Graphics.FromImage(Screen);
    g.CopyFromScreen(SystemInformation.VirtualScreen.X,SystemInformation.VirtualScreen.Y, 0, 0, Screen.Size);
    return Screen;
}

你既不需要定时器也不需要复制整个屏幕。只需添加一个MouseMove处理程序,如下所示:

private void Form1_MouseMove(object sender, MouseEventArgs e)
{
    using (var bitmap = new Bitmap(1, 1))
    {
        var graphics = Graphics.FromImage(bitmap);
        var position = PointToScreen(e.Location);
        graphics.CopyFromScreen(position.X, position.Y, 0, 0, new Size(1, 1));
        var color = bitmap.GetPixel(0, 0);

        label1.Text = color.ToString();
    }
}
或重复使用位图:

private readonly Bitmap bitmap = new Bitmap(1, 1);

private void Form1_MouseMove(object sender, MouseEventArgs e)
{
    var graphics = Graphics.FromImage(bitmap);
    var position = PointToScreen(e.Location);
    graphics.CopyFromScreen(position.X, position.Y, 0, 0, new Size(1, 1));
    var color = bitmap.GetPixel(0, 0);

    label1.Text = color.ToString();
}

你既不需要定时器也不需要复制整个屏幕。只需添加一个MouseMove处理程序,如下所示:

private void Form1_MouseMove(object sender, MouseEventArgs e)
{
    using (var bitmap = new Bitmap(1, 1))
    {
        var graphics = Graphics.FromImage(bitmap);
        var position = PointToScreen(e.Location);
        graphics.CopyFromScreen(position.X, position.Y, 0, 0, new Size(1, 1));
        var color = bitmap.GetPixel(0, 0);

        label1.Text = color.ToString();
    }
}
或重复使用位图:

private readonly Bitmap bitmap = new Bitmap(1, 1);

private void Form1_MouseMove(object sender, MouseEventArgs e)
{
    var graphics = Graphics.FromImage(bitmap);
    var position = PointToScreen(e.Location);
    graphics.CopyFromScreen(position.X, position.Y, 0, 0, new Size(1, 1));
    var color = bitmap.GetPixel(0, 0);

    label1.Text = color.ToString();
}

当您以正确的方式使用代码时,您的代码可以完美地工作:(没有全局“b”)

但当然,尝试只为单个像素复制整个屏幕是错误的

因此,使用类似于克莱门斯的固定代码

e、 g:


并且不要忘记以dispose方法的形式处理位图。

如果您以正确的方式使用它,您的代码将非常有效:(没有全局“b”)

但当然,尝试只为单个像素复制整个屏幕是错误的

因此,使用类似于克莱门斯的固定代码

e、 g:


不要忘记在表单dispose方法中处理位图。

但最大的问题是什么?你能详细说明一下吗?完成后需要处理位图。你在哪里以及如何存储它们?你不需要复制整个屏幕来获得一个像素。在MouseMove处理程序中,复制1x1位图。但最大的问题是什么?你能详细说明一下吗?完成后需要处理位图。你在哪里以及如何存储它们?你不需要复制整个屏幕来获得一个像素。在MouseMove处理程序中,复制1x1位图。