我正在做一些图像识别/运动检测,需要能够访问来自屏幕的像素数据和某种坐标,这样我就可以看到350,425的像素是什么颜色,依此类推。
我最近从屏幕的一个区域询问了a question about getting pixel data。在AHK中查看像素的默认方法非常慢(从1080p屏幕记录数据需要半天时间)。答案似乎是在AHK中使用gdip库,如下所示:
https://github.com/cswoyer/AutoHotkey/blob/master/ScreenCapture.ahk
然而,我不知道如何在处理过程中以我可以使用的格式获取像素数据。我需要访问某种结构中的数据,可以通过x,y坐标访问,或者是遵循某种基本模式的格式,这样我就可以将其重新格式化为网格数据结构并使用它。
我一直在尝试检查各种变量,寻找我可以尝试处理的任何类型的文本数据,但我尝试过的所有变量似乎都不包含文本或对象数据。
发布于 2017-06-19 18:20:10
我不知道你想要做什么,但是在一个变量中保存一个截图并从中获取像素应该会更快。但显然,截图需要几毫秒的时间,所以我不确定这在“运动检测”方面有多大用处。
#SingleInstance, Force
SetBatchLines, -1
SetWorkingDir %A_ScriptDir%
#Include Gdip.ahk
pToken := Gdip_Startup()
pBitmap := Gdip_BitmapFromScreen() ; Make a screenshot
; Read RGB color from pixel x350 y425
ARGB := Gdip_GetPixel( pBitmap, 350, 425 )
pixelColor := ARGBtoRGB( ARGB )
MsgBox, % pixelColor
; Read RGB color from pixel x345 y567
ARGB := Gdip_GetPixel( pBitmap, 345, 567 )
pixelColor := ARGBtoRGB( ARGB )
MsgBox, % pixelColor
Gdip_DisposeImage(pBitmap)
Gdip_Shutdown(pToken)
ARGBtoRGB( ARGB ) {
VarSetCapacity( RGB,6,0 )
DllCall( "msvcrt.dll\sprintf", Str,RGB, Str,"%06X", UInt,ARGB<<8 )
Return "0x" RGB
}
这两个帖子的功劳:
https://autohotkey.com/board/topic/47007-get-pixel-color-from-a-bmp/?p=293766
https://autohotkey.com/board/topic/91427-gdi-how-to-get-bitmap-from-certain-area-of-screen/?p=576860
可在此处找到Gdip.ahk:https://github.com/tariqporter/Gdip/blob/master/Gdip.ahk
https://stackoverflow.com/questions/44625073
复制相似问题