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

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

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

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

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

pip install mss pywin32

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

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

import win32gui
from mss import mss

# 獲取窗口句柄
hwnd = win32gui.FindWindow(None, "記事本")  # 替換為實(shí)際窗口標(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)換為屏幕絕對(duì)坐標(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(自動(dòng)處理BGRA轉(zhuǎn)RGB)
    sct_img = sct_img.convert("RGB")
    sct_img.save("window_mss.png")

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

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

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

問(wèn)題2:DPI縮放導(dǎo)致尺寸錯(cuò)誤

檢測(cè)方法

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)整后的尺寸。

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

  • 驗(yàn)證:使用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. 跨平臺(tái)適配建議

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

# macOS示例(通過(guò)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. 驗(yàn)證與調(diào)試技巧

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

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

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

相關(guān)文章

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

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

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

    Python多進(jìn)程分塊讀取超大文件的方法

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

    搭建pypi私有倉(cāng)庫(kù)實(shí)現(xiàn)過(guò)程詳解

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

    Python的logging模塊基本用法

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

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

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

    python在每個(gè)字符后添加空格的實(shí)例

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

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

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

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

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

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

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

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

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

最新評(píng)論

乐清市| 汽车| 英吉沙县| 承德市| 达拉特旗| 伊宁市| 大邑县| 陆良县| 大洼县| 容城县| 日土县| 来宾市| 绍兴市| 宝山区| 扬中市| 潞城市| 新密市| 淮滨县| 固始县| 甘肃省| 鱼台县| 湘西| 临朐县| 溧水县| 烟台市| 渑池县| 鄂尔多斯市| 怀集县| 茶陵县| 蕲春县| 涞水县| 墨脱县| 永靖县| 南阳市| 威信县| 应城市| 唐河县| 敦化市| 合山市| 泊头市| 巴里|