最新国产好看的视频,伊人天堂AV在线,国产Aaaaaa视频,蜜臀视频在线观看一区,人妻av色图,密臀久久久精品影片,青青视频免费观看毛片,久草在线观看视,国产三级精品色情在线

Python使用mss獲取窗口圖片的方法

 更新時間:2025年10月15日 09:07:36   作者:detayun  
Python MSS(Multiple Screen Shots)是一款由BoboTiG開發(fā)的開源庫,旨在提供高性能、純Python編寫的屏幕截圖功能,本文給大家介紹了Python使用mss獲取窗口圖片的方法,需要的朋友可以參考下

您在使用mss時遇到的ModuleNotFoundError表明當(dāng)前環(huán)境未安裝該庫。以下是完整解決方案,包含安裝指導(dǎo)、代碼邏輯詳解及常見問題處理:

1. 安裝依賴庫(需在本地執(zhí)行)

pip install mss pywin32

2. 使用mss獲取窗口圖片的詳細步驟

步驟1:獲取窗口句柄及精確坐標(biāo)

import win32gui
from mss import mss

# 獲取窗口句柄
hwnd = win32gui.FindWindow(None, "記事本")  # 替換為實際窗口標(biāo)題
if hwnd == 0:
    raise Exception("未找到目標(biāo)窗口")

# 獲取窗口客戶區(qū)坐標(biāo)(排除標(biāo)題欄/邊框)
left, top, right, bot = win32gui.GetClientRect(hwnd)
win32gui.ClientToScreen(hwnd, (left, top))  # 轉(zhuǎn)換為屏幕絕對坐標(biāo)

步驟2:配置mss截圖參數(shù)

with mss() as sct:
    # 定義截圖區(qū)域(精確到客戶區(qū))
    monitor = {
        "left": left,
        "top": top,
        "width": right - left,
        "height": bot - top
    }
    
    # 捕獲屏幕區(qū)域
    sct_img = sct.grab(monitor)
    
    # 保存為PNG(自動處理BGRA轉(zhuǎn)RGB)
    sct_img = sct_img.convert("RGB")
    sct_img.save("window_mss.png")

3. 關(guān)鍵問題處理

問題1:坐標(biāo)偏移(如標(biāo)題欄/邊框)

  • 原因GetWindowRect返回的是窗口外部矩形,包含非客戶區(qū)。
  • 解決:使用GetClientRect + ClientToScreen組合獲取客戶區(qū)絕對坐標(biāo),確保截圖僅包含內(nèi)容區(qū)域。

問題2:DPI縮放導(dǎo)致尺寸錯誤

檢測方法

from ctypes import windll
dpi = windll.user32.GetDpiForWindow(hwnd)
scale = dpi / 96.0  # 96為基準(zhǔn)DPI
adjusted_width = int((right - left) * scale)

處理:在monitor字典中使用調(diào)整后的尺寸。

問題3:多顯示器坐標(biāo)系差異

  • 驗證:使用ctypes.windll.user32.GetMonitorInfo獲取顯示器物理范圍。
  • 示例
monitor_info = {}
ctypes.windll.user32.GetMonitorInfoA(ctypes.windll.user32.MonitorFromWindow(hwnd, 1), ctypes.byref(monitor_info))
print("顯示器工作區(qū):", monitor_info["rcWork"])

4. 完整修正代碼

import win32gui
from mss import mss
import ctypes

# 獲取窗口句柄
hwnd = win32gui.FindWindow(None, "記事本")
if hwnd == 0:
    raise Exception("未找到記事本窗口")

# 獲取客戶區(qū)坐標(biāo)
left, top, right, bot = win32gui.GetClientRect(hwnd)
win32gui.ClientToScreen(hwnd, (left, top))

# 處理DPI縮放
dpi = ctypes.windll.user32.GetDpiForWindow(hwnd)
scale = dpi / 96.0
adjusted_left = int(left * scale)
adjusted_top = int(top * scale)
width = int((right - left) * scale)
height = int((bot - top) * scale)

# 使用mss截圖
with mss() as sct:
    monitor = {
        "left": adjusted_left,
        "top": adjusted_top,
        "width": width,
        "height": height
    }
    sct_img = sct.grab(monitor)
    sct_img = sct_img.convert("RGB")  # 轉(zhuǎn)換顏色格式
    sct_img.save("corrected_window.png")

print("截圖已保存,尺寸:{}x{}".format(width, height))

5. 跨平臺適配建議

macOS/Linux:使用QuartzXlib替代win32gui,邏輯類似:

# macOS示例(通過Quartz獲取窗口ID)
from Quartz import CGWindowListCopyWindowInfo
windows = CGWindowListCopyWindowInfo(kCGWindowListOptionAll)
target_window = [w for w in windows if "記事本" in w.get("kCGWindowName", "")][0]
bounds = target_window["kCGWindowBounds"]

6. 驗證與調(diào)試技巧

  • 坐標(biāo)驗證:使用print(monitor)輸出截圖區(qū)域坐標(biāo),與實際窗口對比。
  • 邊界測試:在純色桌面背景下測試,檢查截圖邊角是否與窗口邊緣對齊。
  • 性能優(yōu)化:對于頻繁截圖場景,緩存窗口句柄和DPI值以減少重復(fù)計算。

通過上述方法,可徹底解決窗口截圖的位置偏差問題。如仍遇異常,建議使用pygetwindow庫輔助驗證窗口坐標(biāo),或通過pywin32GetWindowPlacement進一步調(diào)試窗口狀態(tài)。

到此這篇關(guān)于Python使用mss獲取窗口圖片的方法的文章就介紹到這了,更多相關(guān)Python mss獲取窗口圖片內(nèi)容請搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!

相關(guān)文章

  • Python3中的最大整數(shù)和最大浮點數(shù)實例

    Python3中的最大整數(shù)和最大浮點數(shù)實例

    今天小編就為大家分享一篇Python3中的最大整數(shù)和最大浮點數(shù)實例,具有很好的參考價值,希望對大家有所幫助。一起跟隨小編過來看看吧
    2019-07-07
  • Python多進程分塊讀取超大文件的方法

    Python多進程分塊讀取超大文件的方法

    這篇文章主要介紹了Python多進程分塊讀取超大文件的方法,涉及Python多進程操作與文件分塊讀取的相關(guān)技巧,需要的朋友可以參考下
    2016-04-04
  • 搭建pypi私有倉庫實現(xiàn)過程詳解

    搭建pypi私有倉庫實現(xiàn)過程詳解

    這篇文章主要介紹了搭建pypi私有倉庫實現(xiàn)過程詳解,文中通過示例代碼介紹的非常詳細,對大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價值,需要的朋友可以參考下
    2020-11-11
  • Python的logging模塊基本用法

    Python的logging模塊基本用法

    這篇文章主要介紹了Python的logging模塊基本用法,幫助大家更好的理解和使用python,感興趣的朋友可以了解下
    2020-12-12
  • pandas實現(xiàn)數(shù)據(jù)concat拼接的示例代碼

    pandas實現(xiàn)數(shù)據(jù)concat拼接的示例代碼

    pandas.concat用于合并DataFrame或Series,本文主要介紹了pandas實現(xiàn)數(shù)據(jù)concat拼接的示例代碼,具有一定的參考價值,感興趣的可以了解一下
    2025-06-06
  • python在每個字符后添加空格的實例

    python在每個字符后添加空格的實例

    今天小編就為大家分享一篇python在每個字符后添加空格的實例,具有很好的參考價值,希望對大家有所幫助。一起跟隨小編過來看看吧
    2018-05-05
  • Pandas數(shù)據(jù)操作及數(shù)據(jù)分析常用技術(shù)介紹

    Pandas數(shù)據(jù)操作及數(shù)據(jù)分析常用技術(shù)介紹

    Pandas是Python中用于數(shù)據(jù)處理和數(shù)據(jù)分析的庫,具有強大的數(shù)據(jù)操作和分析功能,包括數(shù)據(jù)清洗、轉(zhuǎn)換、篩選、聚合等。常用技術(shù)有數(shù)據(jù)讀取與寫入、數(shù)據(jù)索引、數(shù)據(jù)切片、數(shù)據(jù)合并、數(shù)據(jù)透視表、數(shù)據(jù)可視化等,適用于各種數(shù)據(jù)分析和機器學(xué)習(xí)任務(wù)
    2023-04-04
  • Python中的“_args”和“__kwargs”用法詳解

    Python中的“_args”和“__kwargs”用法詳解

    *args 和 **kwargs 主要?于函數(shù)定義,你可以將不定數(shù)量的參數(shù)傳遞給?個函數(shù),這篇文章主要介紹了Python中的“_args”和“__kwargs”用法,需要的朋友可以參考下
    2023-01-01
  • 用Python監(jiān)控NASA TV直播畫面的實現(xiàn)步驟

    用Python監(jiān)控NASA TV直播畫面的實現(xiàn)步驟

    本文分享一個名為"Spacestills"的開源程序,它可以用于查看 NASA TV 的直播畫面(靜止幀)
    2021-05-05
  • django模型查詢操作的實現(xiàn)

    django模型查詢操作的實現(xiàn)

    一旦創(chuàng)建好了數(shù)據(jù)模型,Django就會自動為我們提供一個數(shù)據(jù)庫抽象API,允許創(chuàng)建、檢索、更新和刪除對象操作,本文就詳細的介紹一下,感興趣的可以了解一下
    2021-08-08

最新評論

吉水县| 临西县| 志丹县| 临漳县| 临江市| 伊宁市| 无极县| 绵竹市| 怀宁县| 东乡| 武宁县| 山西省| 三原县| 鹤山市| 长海县| 尼玛县| 新巴尔虎右旗| 敦化市| 开阳县| 卢湾区| 宜良县| 镶黄旗| 南丹县| 屯门区| 汉中市| 滦平县| 淮滨县| 大理市| 河东区| 辽源市| 庄河市| 诸暨市| 松阳县| 巨野县| 岢岚县| 张北县| 敖汉旗| 女性| 来凤县| 中卫市| 福鼎市|