Python——pygame图像处理(一)

一. 单个像素

有时我们并不想画一个圆或矩形,而是希望画单个的点或像素。比如画一条正弦曲线。

import pygame,sys,math
pygame.init()
screen = pygame.display.set_mode([640,480])
screen.fill([255,255,255])
for x in range(0,640):
    y = int(math.sin(x/640.0 * 4 * math.pi) * 200 + 240)
    pygame.draw.rect(screen, [0,0,0], [x,y,1,1], 1)
pygame.display.flip()

running = True
while running:
    for event in pygame.event.get():
        if event.type == pygame.QUIT:
            running = False
pygame.quit()

图中每个点都是宽和高均为1像素的矩形。注意我们使用的线宽为1,而不是零。如果线宽为0,什么都不会显示,因为这样的矩形没有中间部分可以填充。
在这里插入图片描述

1.连接多个点

仔细看上图,会发现这个正弦曲线并不是连续的,中间存在空格。我们画的是单个的点,而不是线。

下边要尝试用一天短线把各点连接起来。Pygame有一个画线的方法,另外还有一种方法可以在一系列点之间画线。这个方法就是pygame.draw.lines( ),它需要5个参数:

  • 画线的表面
  • 颜色
  • 是否要形状闭合。若不希望闭合,这个参数是False,闭合参数为True
  • 要连接的点的列表
  • 线宽

所以正弦曲线例子中。pygame.draw.lines( )的方法是这样的:

pygame.draw.lines(screen, [0,0,0], False, plotPoints, 1)

整个程序的代码:

import pygame,sys,math
pygame.init()
screen = pygame.display.set_mode([640,480])
screen.fill([255,255,255])
plotPoints = []
for x in range(0,640):
    y = int(math.sin(x/640.0 * 4 * math.pi) * 200 + 240)
    plotPoints.append([x,y])
pygame.draw.lines(screen, [0,0,0], False, plotPoints, 1)
pygame.display.flip()

running = True
while running:
    for event in pygame.event.get():
        if event.type == pygame.QUIT:
            running = False
pygame.quit()

在这里插入图片描述
把线宽加宽为2试试,效果更好:
在这里插入图片描述

2.玩一个小花样:

import pygame,sys
pygame.init()

dots = [[221,432],[225,331],[133,342],[141,310],
        [51,230],[74,217],[58,153],[114,164],
        [123,135],[176,190],[159,77],[193,93],
        [230,28],[267,93],[301,77],[284,190],
        [327,135],[336,164],[402,153],[386,217],
        [409,230],[319,310],[327,342],[233,331],
        [237,432]]

screen = pygame.display.set_mode([640,480])
screen.fill([255,255,255])
pygame.draw.lines(screen,[255,0,0],True,dots,5)
pygame.display.flip()

running = True
while running:
    for event in pygame.event.get():
        if event.type == pygame.QUIT:
            running = False
pygame.quit()

在这里插入图片描述

二. 图像

在屏幕上画图形、线和单个像素只是制作图形的一种方法。有时我们还可以用从别处得来的图片,在Pygame中,使用图形最简单的方法就是利用image函数。

1.打开一个图像

首先把图片(我的是“timg”)放到程序下的文件夹中,键入:

import pygame,sys
pygame.init()
screen = pygame.display.set_mode([640,480])
screen.fill([255,255,255])
my_dog = pygame.image.load("timg.jpg") 
screen.blit(my_dog,[50,50])
pygame.display.flip()


running = True
while running:
    for event in pygame.event.get():
        if event.type == pygame.QUIT:
            running = False
pygame.quit()

在这里插入图片描述
上例第5行中,pygame.image.load( )函数从硬盘加载一个图像,并创建一个名为my_dog的对象。my_dog对象是一个表面。不过我们看不到这个表面,它只在内存中。我们唯一能看到的是显示表面,名为screen。而第六行把my_dog表面复制到screen表面上。然后通过display.flip( )调用使它可见。

2. 让图像动起来

图像移动,其实就是把图像(像素组)从一个地方移动到另一个地方。

先试试左右移动。先向右移动100像素,还需要加上一个延时,以便看到动画发生。

import pygame,sys
pygame.init()
screen = pygame.display.set_mode([640,480])
screen.fill([255,255,255])
my_dog = pygame.image.load("timg.jpg") 
screen.blit(my_dog,[50,50])
pygame.display.flip()
pygame.time.delay(2000)
screen.blit(my_dog,[150,50])
pygame.display.flip()

running = True
while running:
    for event in pygame.event.get():
        if event.type == pygame.QUIT:
            running = False
pygame.quit()

在这里插入图片描述
我们确实做到把图像右移但是第一个仍然存在,我们下一步就是要把原图擦掉。

3. 动画

计算机上的图形不像黑板上画的画,很容易就擦掉。要想“擦掉”某个东西,实际上要做的是把它“盖住”。我们的背景色是白色,那我们就必须用白色覆盖原来的小狗。
代码如下:

import pygame,sys
pygame.init()
screen = pygame.display.set_mode([640,480])
screen.fill([255,255,255])
my_dog = pygame.image.load("timg.jpg") 
screen.blit(my_dog,[50,50])
pygame.display.flip()
pygame.time.delay(2000)
screen.blit(my_dog,[150,50])
pygame.draw.rect(screen,[255,255,255],[50,50,90,90],0)
pygame.display.flip()

running = True
while running:
    for event in pygame.event.get():
        if event.type == pygame.QUIT:
            running = False
pygame.quit()

在这里插入图片描述
下转:Python——pygame图像处理(二)

猜你喜欢

转载自blog.csdn.net/qq_37369201/article/details/83928814