#include <GDIPlus.au3>
#include <screencapture.au3>
#include <Array.au3>
#include <GDIPlus.au3>
#include <GUIConstantsEx.au3>
#include <StaticConstants.au3>
$hTimer = TimerInit()
$a = _bitmapGetColor('1.jpg',50, 50)
MsgBox(0,TimerDiff($hTimer), $a)
Func _bitmapGetColor($iFile,$iX, $iY) ;成功则返回数组.失败返回0.
;定义子程序必须的变量
Local $hBitmap, $BitmapData, $Scan0, $pixelData, $s_BMPData, $i_Stride
;初始化GDI+库
_GDIPlus_Startup()
;如果调用函数时候没有指定宽和高, 则调用API获取宽和高.
;调用函数获取指定窗体的位图句柄.
;~ $hBMP = _WinCapture($hand, $iWidth, $iHeight)
;从位图句柄创建Bitmap对象
$hBitmap = _GDIPlus_BitmapCreateFromFile($iFile)
;~ $hBitmap = _GDIPlus_BitmapCreateFromHBITMAP($hBMP)
;如果未创建成功,则直接退出.未创建成功可能是因为无效的图形句柄
If @error Then
_GDIPlus_Shutdown()
Return 0
EndIf
;获取位图句柄的宽和高.
$iWidth = $iX+5
$iHeight = $iY+5
;锁定位图句柄中用于输入输出的部分. 将位图句柄中的数据格式格式化成24位的RGB格式.
$BitmapData = _GDIPlus_BitmapLockBits($hBitmap, 0, 0, $iX, $iY, $GDIP_ILMREAD, $GDIP_PXF24RGB)
;以下几句可能是BMP的数据格式, 我不懂. 这是大牛阿福给的
$i_Stride = DllStructGetData($BitmapData, "Stride")
$Scan0 = DllStructGetData($BitmapData, "Scan0")
$pixelData = DllStructCreate("ubyte lData[" & (Abs($i_Stride) * $iHeight) & "]", $Scan0)
$s_BMPData = DllStructGetData($pixelData, "lData")
$s_BMPData = StringTrimLeft($s_BMPData, 2)
;解锁BMP位图数据区块.
_GDIPlus_BitmapUnlockBits($hBitmap, $BitmapData)
;销毁位图句柄
_GDIPlus_ImageDispose($hBitmap)
;删除位图对象.
_WinAPI_DeleteObject($hBitmap)
;关闭GDI库
_GDIPlus_Shutdown()
;定义变量.
Local $a_return[$iWidth][$iHeight], $s
;从位图数据中取出指定的那行.
;~ Local $a_return[$i_width][$i_height], $x = $i_width - 5, $y = $i_height - 5, $s
;~ $s = StringMid($s_BMPData, $y * ($i_Stride * 2) + 1, $i_width * 6)
$s = StringMid($s_BMPData, $iY * ($i_Stride * 2) + 1, $iWidth * 6)
;从该行中读出指定的那个坐标.
$a_return[$iX][$iY] = StringMid($s, $iX * 6 + 1, 6)
;BGR转RGB.
$a_return[$iX][$iY] = "0x" & StringRight($a_return[$iX][$iY], 2) & StringMid($a_return[$iX][$iY], 3, 2) & StringLeft($a_return[$iX][$iY], 2)
Return $a_return[$iX][$iY]
EndFunc ;==>_bitmapGetColor
准确性100%,完美.坐标点完美匹配!