python笔记(三十七) pygame(4) 裁剪拖拽图片

一.图片裁剪拖拽

import pygame
import sys

# 初始化pygame
pygame.init()

size = width ,height = 900, 500
speed = [-2,1]
bg = (255,255,255)

fullscreen = False

clock = pygame.time.Clock()

# 创建指定大小的窗口
screen = pygame.display.set_mode(size)

# 设置窗口标题
pygame.display.set_caption("闲得发慌")

# 加载图片
people = pygame.image.load("p.gif")

# 获得图像矩形位置
position = people.get_rect()
position.center = width // 2, height // 2

# 0 :未选择 1:选择中 2:完成选择
select = 0
select_rect = pygame.Rect(0,0,0,0) # 初始化一个矩形对象

# 0 :未拖拽 1:拖拽中 2:完成拖拽
drag = 0


while True:
    for event in pygame.event.get():
        if event.type == pygame.QUIT:
            sys.exit()

        elif event.type == pygame.MOUSEBUTTONDOWN:
            if event.button == 1:
                # 鼠标左键第一次点击,选择范围
                if select == 0 and drag == 0:
                    pos_start = event.pos
                    select = 1
                # 第二次点击,拖拽图片
                elif select == 2 and drag == 0:
                    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 == pygame.MOUSEBUTTONUP:
            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(people,position)

    # 实施绘制选择框
    if select:
        mouse_pos = pygame.mouse.get_pos()
        if select == 1:
            pos_stop = mouse_pos
        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()
    # 延迟10毫秒
    #pygame.time.delay(5)

    # 控制帧率
    clock.tick(30)

这里主要是靠两个变量来判断正在进行的事件
而且出现了两个不同的rect函数
第一个select_rect = pygame.Rect(0,0,0,0) # 初始化一个矩形对象,这个参数是坐标
第二个pygame.draw.rect(screen, (0,0,0),select_rect,1)是在draw模块下的rect函数,这个是为了在screen上面绘制一个(0,0,0,)黑色,范围为select_rect,边框厚度为1的矩形
在这里插入图片描述

在这里插入图片描述

  • 0
    点赞
  • 6
    收藏
    觉得还不错? 一键收藏
  • 2
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值