img = np.frombuffer(bmpstr, dtype='uint8') img 如何取得它指定坐标的 RGB
时间: 2024-02-01 21:17:53 浏览: 136
获取BMP的RGB值
4星 · 用户满意度95%
可以使用numpy的切片操作来获取指定坐标的RGB值,下面是一个示例代码:
```python
import win32gui
import win32ui
import win32con
import numpy as np
def get_screenshot(hwnd):
# 获取窗口位置
left, top, right, bottom = win32gui.GetWindowRect(hwnd)
width = right - left
height = bottom - top
# 创建DC对象
hwndDC = win32gui.GetWindowDC(hwnd)
mfcDC = win32ui.CreateDCFromHandle(hwndDC)
saveDC = mfcDC.CreateCompatibleDC()
# 创建位图对象
saveBitMap = win32ui.CreateBitmap()
saveBitMap.CreateCompatibleBitmap(mfcDC, width, height)
# 将位图选入DC对象
saveDC.SelectObject(saveBitMap)
# 截屏
saveDC.BitBlt((0, 0), (width, height), mfcDC, (0, 0), win32con.SRCCOPY)
# 获取位图数据
bmpinfo = saveBitMap.GetInfo()
bmpstr = saveBitMap.GetBitmapBits(True)
# 将位图数据转换为numpy数组
img = np.frombuffer(bmpstr, dtype='uint8')
img.shape = (bmpinfo['bmHeight'], bmpinfo['bmWidth'], 4)
# 获取指定坐标的RGB值
x, y = 100, 100
blue, green, red, _ = img[y, x]
# 释放资源
win32gui.DeleteObject(saveBitMap.GetHandle())
saveDC.DeleteDC()
mfcDC.DeleteDC()
win32gui.ReleaseDC(hwnd, hwndDC)
# 返回截屏结果
return img
```
在示例代码中,我们使用了切片操作 `img[y, x]` 来获取指定坐标 `(x, y)` 的RGB值,并且忽略了Alpha通道的值。你可以根据自己的需要调整坐标和获取的通道。
阅读全文