win32api 如何截屏保存为png或者jpg?

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

回到顶部