gpt4 book ai didi

c# - 有没有办法在不截图 C# 的情况下捕获屏幕像素的颜色?

转载 作者:行者123 更新时间:2023-12-04 04:05:05 24 4
gpt4 key购买 nike

我正在制作一个程序来检测屏幕的一个扇区以执行我需要的操作,我正在通过逐像素审查屏幕截图来找到我想要分析的扇区并与我想要的变化进行比较但我有一个问题,我使用计时器每秒每 20 次截取一次屏幕截图,负责截取屏幕截图的句子以我根本不理解的异常结束,它有时工作正常,直到出现异常“ArgumentsException” ”出现并且消息“参数无效”,所以我不知道可能会发生什么,我应该发送正确的参数,我什至将句子设置为 null 以为遗漏了一些东西但不,同样的事情还在继续,我不明白为什么。

现在,我不知道是否有任何其他方法可以直接检测而不截图我想找到的扇区的像素,因为我看到关于从中捕获图像的句子存在问题屏幕。

我用来截图的代码是:

screenCapture = new Bitmap(Screen.PrimaryScreen.Bounds.Width, Screen.PrimaryScreen.Bounds.Height, PixelFormat.Format32bppRgb);
g = Graphics.FromImage(screenCapture);
g.CopyFromScreen(Screen.PrimaryScreen.Bounds.X, Screen.PrimaryScreen.Bounds.Y, 0, 0, screenCapture.Size, CopyPixelOperation.SourceCopy);

有时问题出在位图中,有时是图形出现同样的问题,所以你能推荐我达到我需要的目的吗?

最佳答案

无需截屏,您可以使用 Win32 API GetPixel:https://www.pinvoke.net/default.aspx/gdi32/getpixel.html

  using System;
using System.Drawing;
using System.Runtime.InteropServices;
sealed class Win32
{
[DllImport("user32.dll")]
static extern IntPtr GetDC(IntPtr hwnd);

[DllImport("user32.dll")]
static extern Int32 ReleaseDC(IntPtr hwnd, IntPtr hdc);

[DllImport("gdi32.dll")]
static extern uint GetPixel(IntPtr hdc, int nXPos, int nYPos);

static public System.Drawing.Color GetPixelColor(int x, int y)
{
IntPtr hdc = GetDC(IntPtr.Zero);
uint pixel = GetPixel(hdc, x, y);
ReleaseDC(IntPtr.Zero, hdc);
Color color = Color.FromArgb((int)(pixel & 0x000000FF),
(int)(pixel & 0x0000FF00) >> 8,
(int)(pixel & 0x00FF0000) >> 16);
return color;
}
}

或者考虑 Blit,因为它们比屏幕截图便宜,C# - Faster Alternatives to SetPixel and GetPixel for Bitmaps for Windows Forms App

关于c# - 有没有办法在不截图 C# 的情况下捕获屏幕像素的颜色?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/62629790/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com