Wenn ich Bitblt () benutze, um einen Screenshot meines Explorers zu erfassen, ist die erfasste Titelleiste schwarz und vPython

Python-Programme
Anonymous
 Wenn ich Bitblt () benutze, um einen Screenshot meines Explorers zu erfassen, ist die erfasste Titelleiste schwarz und v

Post by Anonymous »

Ich versuche, ein Fenster an seinem HWND zu erfassen, wie mein Explorer:


Dies ist die Funktion, die ich verwende:
>def capture_window(hwnd):
win32gui.ShowWindow(hwnd, win32con.SW_RESTORE)
win32gui.SetForegroundWindow(hwnd)
time.sleep(1)

window_dc = win32gui.GetWindowDC(hwnd)
dc_object = win32ui.CreateDCFromHandle(window_dc)
compatible_dc = dc_object.CreateCompatibleDC()

left, top, right, bottom = win32gui.GetClientRect(hwnd)
width = right - left
height = bottom - top

bitmap = win32ui.CreateBitmap()
bitmap.CreateCompatibleBitmap(dc_object, width, height)
compatible_dc.SelectObject(bitmap)

compatible_dc.BitBlt((0, 0), (width, height), dc_object, (0, 0), win32con.SRCCOPY)

bmpinfo = bitmap.GetInfo()
bmpstr = bitmap.GetBitmapBits(True)
img = Image.frombuffer(
"RGB", (bmpinfo["bmWidth"], bmpinfo["bmHeight"]), bmpstr, "raw", "BGRX", 0, 1
)

img = cv2.cvtColor(np.array(img), cv2.COLOR_BGR2RGB)

win32gui.DeleteObject(bitmap.GetHandle())
compatible_dc.DeleteDC()
dc_object.DeleteDC()
win32gui.ReleaseDC(hwnd, window_dc)

return img
< /code>
Die Titelleiste ist schwarz, und es gibt eine gewisse Verschiebung in seiner Position. Was verursacht dies? Ich erwarte, dass es ein gleiches Bild erfassen kann.

Quick Reply

Change Text Case: 
   
  • Similar Topics
    Replies
    Views
    Last post