在保存为 bmp 之前 导出
时间: 2023-10-29 18:04:26 浏览: 35
如果你想在截图保存为 BMP 文件之前就将其导出为图片数据,可以使用与上面代码类似的方式读取窗口的像素数据,然后将其转换为 NumPy 数组。以下是一个示例代码:
```python
import numpy as np
import win32gui
import win32ui
import win32con
# 获取窗口句柄
hwnd = win32gui.FindWindow(None, "窗口标题")
# 获取窗口位置
left, top, right, bottom = win32gui.GetWindowRect(hwnd)
width = right - left
height = bottom - top
# 创建设备描述表
hwndDC = win32gui.GetWindowDC(hwnd)
mfcDC = win32ui.CreateDCFromHandle(hwndDC)
saveDC = mfcDC.CreateCompatibleDC()
# 创建位图对象
saveBitMap = win32ui.CreateBitmap()
saveBitMap.CreateCompatibleBitmap(mfcDC, width, height)
# 将截图保存到位图对象中
saveDC.SelectObject(saveBitMap)
saveDC.BitBlt((0, 0), (width, height), mfcDC, (0, 0), win32con.SRCCOPY)
# 将位图对象转换为 NumPy 数组
bmpinfo = saveBitMap.GetInfo()
bmpstr = saveBitMap.GetBitmapBits(True)
img = np.frombuffer(bmpstr, dtype=np.uint8).reshape((height, width, -1))
# 释放资源
win32gui.DeleteObject(saveBitMap.GetHandle())
saveDC.DeleteDC()
mfcDC.DeleteDC()
win32gui.ReleaseDC(hwnd, hwndDC)
# 输出图片大小
print('Image size:', img.shape)
# 输出图片数据
print('Image data:', img)
```
在上面的代码中,`GetBitmapBits()` 函数会返回位图对象的像素数据,然后使用 NumPy 的 `frombuffer()` 函数将其转换为 NumPy 数组。你可以使用 `shape` 属性获取图片的大小,使用数组本身来获取图片的数据。
希望这可以帮助到你。