c# - 屏幕截图程序过载 RAM
问题描述
所以我对 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();
}
推荐阅读
- css - 高宽比技巧父级的 100%
- php - 正则表达式匹配特定字符,但可选
- emacs - emacs:想要使用制表符缩进(制表符大小 2 或 4)与空格对齐
- c# - WCF 防止 NetNamedPipeBinding 超时
- ssl - Wso identityserver 5.2.0 无法调用使用客户端证书保护的联合 oidc 身份验证器
- javascript - Ruby on Rails - 将文本字段与选择结合起来?
- javascript - 如何将 Base 64 图像分享到 Facebook
- python - Pandas,如何将复杂视图保存在变量中
- javascript - 如何使用 React.js 在 Safari 上的隐藏元素上触发 .click()?
- perl - 如何在单元测试中打印哈希键?