python display函数_Python实现截屏的函数

# -*- coding: cp936 -*-

import time,Image

import os, win32gui, win32ui, win32con, win32api

def window_capture(dpath):

'''''

截屏函数,调用方法window_capture('d:\\') ,参数为指定保存的目录

返回图片文件名,文件名格式:日期.jpg 如:2009328224853.jpg

'''

hwnd = 0

hwndDC = win32gui.GetWindowDC(hwnd)

mfcDC=win32ui.CreateDCFromHandle(hwndDC)

saveDC=mfcDC.CreateCompatibleDC()

saveBitMap = win32ui.CreateBitmap()

MoniterDev=win32api.EnumDisplayMonitors(None,None)

w = MoniterDev[0][2][2]

h = MoniterDev[0][2][3]

#print w,h   #图片大小

saveBitMap.CreateCompatibleBitmap(mfcDC, w, h)

saveDC.SelectObject(saveBitMap)

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

cc=time.gmtime()

bmpname=str(cc[0])+str(cc[1])+str(cc[2])+str(cc[3]+8)+str(cc[4])+str(cc[5])+'.bmp'

saveBitMap.SaveBitmapFile(saveDC, bmpname)

Image.open(bmpname).save(bmpname[:-4]+".jpg")

os.remove(bmpname)

jpgname=bmpname[:-4]+'.jpg'

djpgname=dpath+jpgname

copy_command = "move %s %s" % (jpgname, djpgname)

os.popen(copy_command)

return bmpname[:-4]+'.jpg'

#调用截屏函数

window_capture('d:\\')

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
实现全屏截图并传入tkimage中,可以使用Python调用C语言实现。下面是一个基本的实现步骤: 1. 编写C语言代码实现全屏截图功能。 2. 使用Python的ctypes模块将C语言代码编译成动态链接库,并在Python中进行调用。 3. 将C语言代码返回的图像数据转换为Tkinter中的PhotoImage类型,以便在Tkinter中显示。 以下是一个简单的示例代码,演示如何使用Python调用C语言实现全屏截图并传入Tkinter中: C语言代码: ```c #include <stdio.h> #include <stdlib.h> #include <string.h> #include <X11/Xlib.h> #include <X11/Xutil.h> unsigned char* get_screenshot(int* width, int* height) { Display* dpy = XOpenDisplay(NULL); Window root = DefaultRootWindow(dpy); XWindowAttributes attr; XGetWindowAttributes(dpy, root, &attr); *width = attr.width; *height = attr.height; XImage* img = XGetImage(dpy, root, 0, 0, *width, *height, AllPlanes, ZPixmap); unsigned long red_mask = img->red_mask; unsigned long green_mask = img->green_mask; unsigned long blue_mask = img->blue_mask; unsigned char* data = (unsigned char*)malloc(*width * *height * 3); unsigned char* p = data; for (int y = 0; y < *height; y++) { for (int x = 0; x < *width; x++) { unsigned long pixel = XGetPixel(img, x, y); unsigned char r = (pixel & red_mask) >> 16; unsigned char g = (pixel & green_mask) >> 8; unsigned char b = (pixel & blue_mask); *p++ = r; *p++ = g; *p++ = b; } } XDestroyImage(img); XCloseDisplay(dpy); return data; } ``` Python代码: ```python import ctypes import tkinter as tk from PIL import Image, ImageTk # 加载动态链接库 lib = ctypes.cdll.LoadLibrary('./libscreen.so') # 定义函数原型 lib.get_screenshot.restype = ctypes.POINTER(ctypes.c_ubyte) # 获取全屏截图 width = ctypes.c_int() height = ctypes.c_int() data = lib.get_screenshot(ctypes.byref(width), ctypes.byref(height)) # 转换数据类型 img = Image.frombytes('RGB', (width.value, height.value), data) photo = ImageTk.PhotoImage(img) # 创建窗口并显示图像 root = tk.Tk() label = tk.Label(root, image=photo) label.pack() root.mainloop() ``` 需要注意的是,由于C语言代码使用了X11库来获取屏幕截图,因此该代码只能在Linux系统上运行。如果需要在其他系统上运行,需要使用相应的截图库来替换X11库。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值