Python使用GDI进行绘制的各种方式

Python使用GDI进行绘制的各种方式

像素点绘制

以下代码运行后将会在屏幕500,100的位置绘制一个像素点

import win32gui
import win32api

# 获取屏幕的设备上下文
hdc = win32gui.GetDC(0)
x, y = 500, 100  # 点的坐标
color = win32api.RGB(255, 0, 0)  # 红色
win32gui.SetPixel(hdc, x, y, color) # 绘制像素点

上面的程序执行后也许不明显,因此我们改进一下,多铺点像素点便可清晰的看见,代码和效果如下

import win32gui
import win32api

# 获取屏幕的设备上下文
hdc = win32gui.GetDC(0)
color = win32api.RGB(255, 0, 0)  # 红色
while True:
    for x in range(500,800):
        for y in range(500,800):
            win32gui.SetPixel(hdc, x, y, color)  # 绘制像素点

可以看到,以上代码执行后,将会在屏幕的500,500的位置开始绘制一个300*300的正方形

QQ_1730528373746

线条绘制

对于要绘制线条,若用像素点来绘制的话,效率非常的低,因此再来看下线条的绘制方式,代码和效果如下:

import win32gui
import win32con
import win32api


hdc = win32gui.GetDC(0)
color = win32api.RGB(255, 0, 0)  # 红色
pen = win32gui.CreatePen(win32con.PS_SOLID, 3, color)  # 线条宽度为3
win32gui.SelectObject(hdc, pen) #为设备上下文设置画笔

while True:
    win32gui.MoveToEx(hdc, 500, 500)  # 绘制起点
    win32gui.LineTo(hdc, 800, 800)  # 绘制终点

QQ_1730528705320

绘制实心矩形

绘制实心矩形就比较好理解了,代码和效果如下:

import win32gui
import win32api


hdc = win32gui.GetDC(0)
color = win32api.RGB(0, 255, 0)  # 绿色
brush = win32gui.CreateSolidBrush(color)  # 创建实心画刷
win32gui.SelectObject(hdc, brush)

while True:
    win32gui.FillRect(hdc,(600,600,500,500),brush)

关键代码为FillRect()函数,注意函数中坐标需要为一个元组对象,元组中第一、二个表示一个点的坐标,第三、四表示一个点的坐标,然后这两个点各自固定一个坐标便构成一个实心矩形

QQ_1730529194141

绘制空心矩形

关于空心矩形的绘制,其实有多种方式,可以是像素点构成的,也可以是线条构成的,也可以直接绘制空心矩形,先来看下线条构成的空心矩形如何实现,代码和效果如下:

import win32gui
import win32con
import win32api

# 获取屏幕的设备上下文
hdc = win32gui.GetDC(0)

# 设置矩形边框的颜色和宽度
border_color = win32api.RGB(255, 0, 0)  # 红色
pen = win32gui.CreatePen(win32con.PS_SOLID, 3, border_color)  # 线条宽度为3
win32gui.SelectObject(hdc, pen)

# 矩形的坐标
left, top, right, bottom = 400, 400, 600, 600  # 左、上、右、下坐标

while True:
    # 绘制空心矩形
    win32gui.MoveToEx(hdc, left, top)  # 移动到起点
    win32gui.LineTo(hdc, right, top)  # 顶边
    win32gui.LineTo(hdc, right, bottom)  # 右边
    win32gui.LineTo(hdc, left, bottom)  # 底边
    win32gui.LineTo(hdc, left, top)  # 左边

QQ_1730529587906

然后是直接绘制空心矩形的代码实现,如下:

import win32api
import win32gui

dc = win32gui.GetDC(0)
brush=win32gui.CreateSolidBrush(win32api.RGB(255, 138, 0))

while True:
    win32gui.FrameRect(dc,(400,400,600,600),brush)

QQ_1730529712269

绘制文字

基本的绘制文字如下,这将在500,500到600,600的区域绘制设置的文字:

import win32con
import win32gui

DC=win32gui.GetDC(0)

win32gui.DrawText(DC, "幽络源分享", -1, (500, 500, 600, 600), win32con.DT_BOTTOM)

QQ_1730529857567

如果要设置文字样式呢?如下,我这里设置了字体高度和粗细,当然不止这些,这里演示一部分:

import win32gui
import win32con
import win32api

# 获取屏幕的设备上下文
DC = win32gui.GetDC(0)

# 创建字体结构
logfont = win32gui.LOGFONT()
logfont.lfHeight = 48  # 字体高度
logfont.lfWeight = win32con.FW_HEAVY  # 字体粗细

# 创建字体
font = win32gui.CreateFontIndirect(logfont)

# 选择字体到设备上下文
win32gui.SelectObject(DC, font)

# 绘制文本
win32gui.SetTextColor(DC, win32api.RGB(0, 0, 255))  # 设置文本颜色
win32gui.SetBkColor(DC, win32api.RGB(255, 255, 255))  # 设置背景色
win32gui.DrawText(DC, "幽络源分享", -1, (500, 500, 800, 600), win32con.DT_BOTTOM)

QQ_1730530146513

总结

以上便是使用Python进行GDI绘制到屏幕的基础教程,当然,更多的功能还需自行探究pywin32库。

© 版权声明
THE END
喜欢就支持一下吧
分享
评论 抢沙发
头像
欢迎您留下宝贵的见解!
提交
头像

昵称

取消
昵称

    暂无评论内容