Python 之 pygame 学习(截取图像显示)

一、相关方法知识

  1. pygame.mouse.get_pos():获取鼠标光标的位置,X坐标和Y坐标
    该位置相对于显示屏的左上角。光标位置可以位于显示窗口之外,但始终限制在屏幕上。
  2. pygame.draw.rect():画一个矩形
rect(surface,color,rect,width = 0)
surface:在此屏幕上绘制
color:要绘制的颜色,如果使用元组,则alpha值是可选的(RGB[A])
rect:要绘制的矩形,位置和尺寸(这个矩形具有:left,top,width,height)
width:用于线条粗细或表示要填充矩形(不要与rect参数的宽度值混淆)

返回:	
一个矩形边界变化的像素,如果没有绘制任何东西,边界矩形的位置将是给定rect 参数的位置,其宽度和高度将为0
  1. blit():将一个图像绘制到另一个
blit(source,dest)
source:在此Surface上绘制源Surface。
dest:参数定位绘图。
	  Dest可以是表示源左上角的坐标对。
	  Rect也可以作为目标传递,矩形的topleft角将用作blit的位置。

如果 dest 是一个位置矩形的话,就将其放置在其中心处

position = dog.get_rect()
# 为了控制将初始图像放置在screen的中心处
position.center = width //2,height //2   #整除获得图像中心位置
screen.blit(dog,position)	# 更新图像

二、示例

import pygame
import sys
from pygame.locals import *
pygame.init()
size = width,height = 600,400
bg = (255,255,255)
screen = pygame.display.set_mode(size)
pygame.display.set_caption("初次见面,请大家多多关照")
dog = pygame.image.load("dog.png")

# 使用 select 判断选择框状态,drag 判断拖拽的状态
# 0->未选择,1->选择中,2->完成选择
select = 0

# 0->未拖拽,1->拖拽中,2->完成拖拽
drag = 0

# Rect 用于存储直角坐标的pygame对象
# Rect(左,顶,宽,高) 这些属性可以控制一个矩形的位置,大小
select_rect = pygame.Rect(0,0,0,0)

# 获得图像的位置矩形
position = dog.get_rect()
# 为了控制将初始图像放置在screen的中心处
position.center = width //2,height //2 # 整除获得图像中心位置

# 设置为死循环,确保窗口一直显示
while True:
    # 遍历所有的事件
    for event in pygame.event.get():
        # 如果单击关闭窗口,则退出
        if event.type == pygame.QUIT:
            sys.exit()
        # 如果发生鼠标按下事件
        elif event.type == MOUSEBUTTONDOWN:
            # 鼠标摁下的两个属性,button(1:鼠标摁下)和pos(鼠标点击的坐标)
            if event.button == 1:
                # 第一次点击,选择范围
                if select == 0 and drag == 0:
                    pos_start = event.pos
                    select = 1
                # 第二次点击,拖拽图像
                elif select ==2 and drag == 0:
                    # subsurface 创建一个引用其父级的新表面
                    # copy 方法,返回与原始位置和大小相同的新矩形
                    capture = screen.subsurface(select_rect).copy()
                    cap_rect = capture.get_rect()
                    drag = 1
                # 第三次点击,初始化
                elif select == 2 and drag == 2:
                    select =0
                    drag = 0
        elif event.type == MOUSEBUTTONUP:
            # button = 1 代表松开鼠标
            if event.button == 1:
                # 第一次释放,结束选择
                if select == 1 and drag ==0:
                    # 记录释放点的坐标
                    pos_stop = event.pos
                    select = 2
                if select == 2 and drag == 1:
                    drag = 2

    # 填充背景
    screen.fill(bg)
    # 更新图像
    screen.blit(dog,position)

     # 实时绘制选择框
    if select:
        #pygame.mouse.get_pos():返回鼠标光标的位置X和Y位置。该位置相对于显示屏的左上角。
        mouse_pos = pygame.mouse.get_pos()
        if select == 1:
            pos_stop = mouse_pos
        # 选择框的 left 和 top 通过起始鼠标点击处确定选择框的位置
        select_rect.left,select_rect.top = pos_start
        # 确定选择框的宽和高
        select_rect.width,select_rect.height = pos_stop[0] - pos_start[0],pos_stop[1] - pos_start[1]
        # 画一个矩形
        pygame.draw.rect(screen,(0,0,0),select_rect,1)

    # 拖拽裁剪图像
    if drag:
        if drag == 1:
            cap_rect.center = mouse_pos
        screen.blit(capture,cap_rect)
    # 更新界面
    pygame.display.flip()

结果图
在这里插入图片描述

  • 6
    点赞
  • 15
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

南淮北安

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值