pygame入门教程-图像篇

这篇具有很好参考价值的文章主要介绍了pygame入门教程-图像篇。希望对大家有所帮助。如果存在错误或未考虑完全的地方,请大家不吝赐教,您也可以点击"举报违法"按钮提交疑问。

1. 加载图片

load(filename) -> Surface
load(fileobj, namehint=“”) -> Surface

asurf = pygame.image.load(os.path.join('data', 'bla.png'))

可以看到返回的是一个surface。我们在创建一个窗口的时候返回的也是surface对象,所有想要显示的图像都需要加载到主窗口也就是screen上。pygame提供了一个blit函数可以将一个画布贴到另一个画布上

blit(source, dest, area=None, special_flags=0) -> Rect

source就是另一个surface,dest则是绘制在screen的坐标位置(x,y),area则是想要绘制图片的区域大小。

pygame.image.load,pygame,python,开发语言

import pygame
import os
import itertools
pygame.init()
WIDTH,HEIGHT=600,600
screen = pygame.display.set_mode((WIDTH,HEIGHT))
pygame.display.set_caption("这是一个给我们画画用的窗口")

image = pygame.image.load(os.path.join('./', 'hero.png')) # 1.创建一个surface并加载图片
clock = pygame.time.Clock()

going = True
while going:
    for event in pygame.event.get():  # 遍历事件
        if event.type == pygame.QUIT:  # 退出事件
            going = False

    screen.blit(image, (0, 0)) # 2.将图片加载到主窗口
    pygame.draw.circle(screen,(255,0,0),(200,300),20) # 直接在主窗口画画
    pygame.display.update()
    clock.tick(10)
pygame.quit()

pygame.image.load,pygame,python,开发语言

2. 让素材动起来

可以看到素材的每一行其实是一个人物动作,我们这回先只加载图片的一部分,例如左上角那个人物,所以需要在blit中传入图片的area区域。首先获取图片的大小,surface都是矩形,所以可一个通过get_rect来获取矩形的基础数据

x,y
center, centerx, centery
w,h

img_rect = image.get_rect()
img_w,img_h = img_rect.w,img_rect.h

整个图片有64个小图片,横8个,竖8个,每个宽度就是

dw = img_w // 8
dh = img_h // 8

我们想要获取第三行的人物动作,所以ay=3*dh,如果我们想获取

  • 第三行第一个人物ax=0
  • 第三行第二个人物ax=1*dw
  • 第三行第三个人物ax=2*dw
  • 第三行第四个人物ax=3*dw
import pygame
import os

pygame.init()
WIDTH,HEIGHT=600,600
screen = pygame.display.set_mode((WIDTH,HEIGHT))
pygame.display.set_caption("这是一个给我们画画用的窗口")

image = pygame.image.load(os.path.join('./', 'hero.png'))
img_rect = image.get_rect()
clock = pygame.time.Clock()

dw = img_rect.width // 8
dh = img_rect.height // 8

dx = 1
action_row = 2
action_col = 0

going = True
while going:
    for event in pygame.event.get():  # 遍历事件
        if event.type == pygame.QUIT:  # 退出事件
            going=False

    screen.blit(image, (dx,300),(action_col*dw,dh*action_row,dw,dh))
    dx += 1
    action_col += 1
    action_col = action_col % 8
    j += 1
    j = j%600
    i += 1
    i = i % 8
    pygame.display.flip()
    clock.tick(10)
pygame.quit()

pygame.image.load,pygame,python,开发语言

发现的确是动起来了,但是却出现了残影,这是因为我们并没有对screen进行清屏,所以之前所有的图片都会被保留下来。可以直接通过fill进行清屏

going = True
while going:
    for event in pygame.event.get():  # 遍历事件
        if event.type == pygame.QUIT:  # 退出事件
            going=False
    screen.fill((0,0,0)) # 清除之前所有的显示的图片
    screen.blit(image, (dx,300),(action_col*dw, dh*action_row,dw,dh))
    dx += 1
    action_col += 1
    action_col = action_col % 8
    pygame.display.flip()
    clock.tick(10)

3. 旋转和缩放

缩放函数非常简单哈

pygame.transform.scale(surface, size, dest_surface=None) -> Surface

我们获得新图片的rect属性,rect本质就是一个四元组

rect —> (x,y,width,heigh)

scale_img = pygame.transform.scale(image, (100, 100))
img_rect = scale_img.get_rect() # 获取图片的位置和大小
img_rect.center = (WIDTH//2, HEIGHT//2) # rect的中心移动到窗口中心

然后绘制缩放后的图片,有一点需要注意,pygame绘制的内容是会相互覆盖的,如果有位置重叠,后绘制的会覆盖掉之前绘制的

screen.fill((255,255,255)) # 清屏,白色
screen.blit(scale_img, img_rect) # 加载图片到中心
pygame.draw.rect(screen, (255,0,0), img_rect, width=2) # 绘制一个矩形

pygame.image.load,pygame,python,开发语言
然后再看一下如何旋转图片

pygame.transform.rotate(surface, angle) -> Surface

import pygame
import os

pygame.init()
WIDTH,HEIGHT=600,600
screen = pygame.display.set_mode((WIDTH,HEIGHT))
pygame.display.set_caption("这是一个给我们画画用的窗口")

image = pygame.image.load(os.path.join('./', 'wen.png'))

clock = pygame.time.Clock()

scale_img = pygame.transform.scale(image, (100, 100))

img_rect = scale_img.get_rect() # 获取图片的位置和大小
img_rect.center = (WIDTH//2, HEIGHT//2) # rect的中心移动到窗口中心
angle = 0
going = True
while going:
    for event in pygame.event.get():  # 遍历事件
        if event.type == pygame.QUIT:  # 退出事件
            going=False

    screen.fill((255,255,255))
    rot_img = pygame.transform.rotate(scale_img, angle)
    angle += 1
    angle = angle % 360
    screen.blit(rot_img, img_rect)
    pygame.draw.rect(screen, (255,0,0), rot_img.get_rect(), width=2)

    pygame.display.flip()
    clock.tick(10)
pygame.quit()

pygame.image.load,pygame,python,开发语言
尴尬的是发现绘制的矩形变到了顶端,这是因为suface默认x=0,y=0,我们需要修改一下rect的中心,让其为窗口的中心

import pygame
import os

pygame.init()
WIDTH,HEIGHT=600,600
screen = pygame.display.set_mode((WIDTH,HEIGHT))
pygame.display.set_caption("这是一个给我们画画用的窗口")

image = pygame.image.load(os.path.join('./', 'wen.png'))

clock = pygame.time.Clock()

scale_img = pygame.transform.scale(image, (100, 100))

img_rect = scale_img.get_rect() # 获取图片的位置和大小
img_rect.center = (WIDTH//2, HEIGHT//2) # rect的中心移动到窗口中心
angle = 0
going = True
while going:
    for event in pygame.event.get():  # 遍历事件
        if event.type == pygame.QUIT:  # 退出事件
            going=False

    screen.fill((255,255,255))
    rot_img = pygame.transform.rotate(scale_img, angle)
    angle += 1
    angle = angle % 360
    screen.blit(rot_img, img_rect)
    rot_rect = rot_img.get_rect()
    rot_rect.center = (WIDTH//2, HEIGHT//2)
    pygame.draw.rect(screen, (255,0,0), rot_rect, width=2)

    pygame.display.flip()
    clock.tick(30)
pygame.quit()

pygame.image.load,pygame,python,开发语言文章来源地址https://www.toymoban.com/news/detail-734793.html

到了这里,关于pygame入门教程-图像篇的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处: 如若内容造成侵权/违法违规/事实不符,请点击违法举报进行投诉反馈,一经查实,立即删除!

领支付宝红包 赞助服务器费用

相关文章

  • 图像处理入门教程:从Python到Opencv

    这里主要针对有一定基础的读者,在Python编程中,掌握基础语法和数据类型是非常重要的。它们是构建程序的基石,是提供解决问题和开发应用的工具。在这里,我将简单介绍一些常用的语法和数据类型。 详细请参考此篇纯净Python环境的安装以及配置PyCharm编辑器。 (1)If

    2024年02月13日
    浏览(115)
  • python游戏开发入门经典教程,python游戏开发引擎

    大家好,给大家分享一下python游戏开发入门经典教程,很多人还不知道这一点。下面详细解释一下。现在让我们来看看! 消消乐小游戏相信大家都玩过,大人小孩都喜欢玩的一款小游戏,那么基于程序是如何实现的呢?今天带大家,用python+pygame来实现一下这个花里胡哨的消

    2024年02月02日
    浏览(45)
  • python-cad二次开发入门教程

    用python做cad二次开发已经快两年的时间了,今天看到群里一个哥们到处问怎么python怎么进行cad二次开发,不禁回想起当初自己找教程找的焦头烂额,却始终不得办法的辛酸。现在网上的教程逐渐多了起来,但是我看很多都没有直接讲一个问题,那就是“ 我到底怎么去二次开发

    2024年02月06日
    浏览(41)
  • Python 安装教程,新手入门(超详细)含Pycharm开发环境安装教程

    目录 一、Python介绍 二、Python安装教程 (一)Python的下载 (二)Python的安装 三、Pycharm开发工具的安装 (一)Pycharm介绍 (二)Pycharm的下载 (三)Pycharm的安装 ​        Python由荷兰数学和计算机科学研究学会的吉多·范罗苏姆于1990年代初设计,作为一门叫做ABC语言的替

    2024年01月20日
    浏览(85)
  • 【计算机视觉—python 】 图像处理入门教程 —— 图像属性、像素编辑、创建与复制、裁剪与拼接【 openCV 学习笔记 005 to 010 and 255】

    OpenCV中读取图像文件后的数据结构符合Numpy的ndarray多维数组结构,因此 ndarray 数组的属性和操作方法可用于图像处理的一些操作。数据结构如下图所示: img.ndim:查看代表图像的维度。彩色图像的维数为3,灰度图像的维度为2。 img.shape:查看图像的形状,代表矩阵的行数(高

    2024年01月19日
    浏览(69)
  • 树莓派系统入门教程(三)—— 使用Windows上的VSCode远程连接树莓派进行Python开发

    很多开发者更喜欢在大屏幕和强大的开发环境中编写代码,但同时他们希望能在树莓派这样的微型计算机上执行和测试代码。VSCode提供了一个强大的远程开发工具,可以让你在Windows主机上编写代码,同时在树莓派上执行。下面将为你详细介绍如何实现: 1. 安装VSCode和SSH扩展

    2024年02月12日
    浏览(46)
  • 图像分割入门教程

    图像分割是计算机视觉领域的一个重要任务,其目标是将图像中的像素分配到不同的区域或物体中。图像分割在很多实际应用中都有着广泛的应用,比如医学图像分析、自动驾驶、机器人视觉和图像增强等。本文将介绍图像分割的基本概念、常用方法和实现步骤,帮助读者快

    2024年02月05日
    浏览(45)
  • 图像表示与处理入门教程

    图像是由像素组成的二维数字数组,其中每个像素代表图像中的一个点。每个像素的颜色可以通过不同的颜色空间来表示,其中最常用的是 RGB 颜色空间。在 RGB 颜色空间中,每个像素由红、绿、蓝三个颜色分量组成,每个颜色分量的取值范围为 0 到 255。其他常用的颜色空间

    2023年04月25日
    浏览(56)
  • 图像分类保姆级教程-深度学习入门教程(附代码)

    图像分类是计算机视觉领域中的一个重要任务。它的目的是将输入的图像归类到预定义的类别中。这个任务在过去被认为是非常具有挑战性的,因为图像的特征非常复杂,而且存在很多种不同的变化方式,例如光照、角度、遮挡等等。 然而,随着深度学习的发展,图像分类问

    2024年01月22日
    浏览(55)
  • OpenCV 入门教程:图像读取和显示

    2023年07月08日
    浏览(59)

觉得文章有用就打赏一下文章作者

支付宝扫一扫打赏

博客赞助

微信扫一扫打赏

请作者喝杯咖啡吧~博客赞助

支付宝扫一扫领取红包,优惠每天领

二维码1

领取红包

二维码2

领红包