16

this project의 경우 Windows API (다중 스크린 처리)로 스크린 샷을 찍고 PIL 이미지로 변환합니다. 원하는 경우 창 주위에 그림자를 추가합니다.Python PIL 및 Windows API가있는 활성 창 스크린 샷 : 둥근 모서리를 처리하는 방법은 무엇입니까?

제 문제는 스크린 샷이 실제로 창 사각형인지 여부입니다. 나는 모퉁이를 돌면 그 배경을 포착하고 싶지 않다는 것을 의미한다. 내가 꽤 많이 봤 거든 투명도 주위에 워드 프로세서와 tuts를 발견하고, 내가 그것을 (직사각형) 이미지에 적용 할 수있는 가면을 만들기 위해 윈도우의 모양을 얻을 방법을 찾아야 겠네요. 알았어. 하지만 그 마스크를 얻으려고 찾았습니다. 어느 누구도 도와 줄 수 있습니까?

다음
hwnd = win32gui.GetForegroundWindow() 

l, t, r, b = win32gui.GetWindowRect(hwnd) 
w = r - l 
h = b - t 

hwndDC = win32gui.GetWindowDC(hwnd) 
mfcDC = win32ui.CreateDCFromHandle(hwndDC) 
saveDC = mfcDC.CreateCompatibleDC() 

saveBitMap = win32ui.CreateBitmap() 
saveBitMap.CreateCompatibleBitmap(mfcDC, w, h) 
saveDC.SelectObject(saveBitMap) 

saveDC.BitBlt((0, 0), (w, h), mfcDC, (0, 0), win32con.SRCCOPY) 

#add cursor 
if showcursor: 
    curFlags, curH, (curX, curY) = win32gui.GetCursorInfo() 
    saveDC.DrawIcon((curX, curY), curH) 

#load into PIL image 
"""http://stackoverflow.com/questions/4199497/image-frombuffer-with-16-bit-image-data""" 
bmpinfo = saveBitMap.GetInfo() 
bmpstr = saveBitMap.GetBitmapBits(True) 
im = Image.frombuffer(
    'RGB', 
    (bmpinfo['bmWidth'], bmpinfo['bmHeight']), 
    bmpstr, 'raw', 'BGRX', 0, 1) 

win32gui.DeleteObject(saveBitMap.GetHandle()) 
saveDC.DeleteDC() 
mfcDC.DeleteDC() 
win32gui.ReleaseDC(hwnd, hwndDC) 

return im 

파란색 배경 위에 윈도우의 약간 확대 된 스크린 샷입니다 : 아래

내 코드에서 볼 수 있듯이

파란색 모서리가 그 shouldn ' 거기있어.

+0

여전히 해결책을 찾을 수 없습니다. 아무도? – NorthernLights

+3

사실 Microsoft가 제공하는 SnippingTool.exe에 대해서조차 Windows 캡처를 처리하는 소프트웨어를 찾지 못했습니다. 2 픽셀 잘라 내기, 또는 그 순수한 흑백의 2 픽셀보십시오. 정확히 MS 셰이프를 잘라내고 싶다면, MS doc : window corner shape를 읽는 것이 system.RadiusX/RadiusY에 정의되어 있습니다. http://msdn.microsoft.com/en-us/library/system.windows.shapes.rectangle.radiusy.aspx # Y0 – fanlix

+0

비슷한 질문이 있으십니까? http://stackoverflow.com/questions/2224220/win32-how-to-make-drop-shadow-honor-non-rectangular-layered-window –

답변

1

Edge detection 알고리즘 (예 : Prewitt 또는 Sobel)을 사용하여 창 가장자리를 감지하는 이유는 알파 채널을 이미지 제한과 창 가장자리 제한 사이의 픽셀로 설정하기 만하면됩니다.

관련 문제