# 获取窗口位置 left, top, right, bottom = win32gui.GetWindowRect(hwnd) # 获取窗口坐标 width = right - left height = bottom - top hwndDC = win32gui.GetWindowDC(hwnd) # 获取窗口DC 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) # 获取位图信息 bmpinfo = saveBitMap.GetInfo() bmpstr = saveBitMap.GetBitmapBits(True) # 转换为numpy数组 img = np.frombuffer(bmpstr, dtype='uint8') img.shape = (bmpinfo['bmHeight'], bmpinfo['bmWidth'], 4) # 转换为RGB格式 img = cv2.cvtColor(img, cv2.COLOR_BGRA2RGB) # 保存为bmp格式 cv2.imwrite('1.png', img) return img 图片颜色不对
时间: 2024-02-14 12:15:55 浏览: 136
Microsoft Spy++ 获取Windows窗口的位置
根据您提供的代码,获取窗口截图后,将截图数据转换为 NumPy 数组并转换为 RGB 格式,保存为 BMP 格式。如果您得到的图像颜色不正确,可能是因为 BMP 格式不支持 alpha 通道(即透明度),造成了颜色失真。您可以将保存格式更改为 PNG 格式,因为 PNG 格式支持 alpha 通道。您可以使用 OpenCV 库的 `cv2.imencode()` 函数将 NumPy 数组编码为 PNG 格式的图像,在内存中生成 PNG 数据,然后将其保存到文件中,如下所示:
```python
# 转换为RGB格式
img = cv2.cvtColor(img, cv2.COLOR_BGRA2RGB)
# 保存为PNG格式
ret, png_data = cv2.imencode('.png', img)
with open('1.png', 'wb') as f:
f.write(png_data)
return img
```
这样,您得到的图像应该颜色正确了。
阅读全文