win32api 如何截屏保存为png或者jpg?
# 截取屏幕def get_screen(name='mysc.bmp'):
# 获取桌面
hdesktop = win32gui.GetDesktopWindow()
# 分辨率适应
width = win32api.GetSystemMetrics(win32con.SM_CXVIRTUALSCREEN)
height = win32api.GetSystemMetrics(win32con.SM_CYVIRTUALSCREEN)
left = win32api.GetSystemMetrics(win32con.SM_XVIRTUALSCREEN)
top = win32api.GetSystemMetrics(win32con.SM_YVIRTUALSCREEN)
# 创建设备描述表
desktop_dc = win32gui.GetWindowDC(hdesktop)
img_dc = win32ui.CreateDCFromHandle(desktop_dc)
# 创建一个内存设备描述表
mem_dc = img_dc.CreateCompatibleDC()
# 创建位图对象 screenshot = bmp
screenshot = win32ui.CreateBitmap()
screenshot.CreateCompatibleBitmap(img_dc, width, height)
mem_dc.SelectObject(screenshot)
# 截图至内存设备描述表
mem_dc.BitBlt((0, 0), (width, height), img_dc, (0, 0), win32con.SRCCOPY)
# 将截图保存到文件中
screenshot.SaveBitmapFile(mem_dc, name)
# # 内存释放
mem_dc.DeleteDC()
win32gui.DeleteObject(screenshot.GetHandle())
保存下来的是bmp,太大了啊
回答:
你都拿到 Bitmap 了,用 PIL 转成 JPG 再保存不就好啦?顶多牺牲一下内存占用。
很多 Win32 API 都继承自上古时代的 Windows 95 甚至更早的 Windows 3.0,这是个 1990 年就推出的操作系统;而 JPEG 格式标准在 1992 年才推出、PNG 格式标准更是 1996 年才制定出来,所以早期的 Win32 API 根本没考虑其他图片格式。
当然更重要的一点是,BMP 是微软主导制定的格式标准,当然微软优先支持它了。
以上是 win32api 如何截屏保存为png或者jpg? 的全部内容, 来源链接: utcz.com/a/160929.html