C# 屏幕截图程序过载RAM
因此,我对C#比较陌生,我想使用一个应用程序,向您显示悬停在上面的像素的颜色,但使用这段代码似乎有一个大问题。 谢谢你的帮助 守则: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.
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位图。