from PIL import Image
import sys
import time
import pygame
import random
import matplotlib.pyplot as plt
import numpy as np
pygame.init()
# 使用pygame之前必须初始化
# 说明:set_mode()可以短时间显示主屏窗口
pygame.display.set_caption("pulse rate") # 设置窗口标题
# 说明:若不设置窗口标题,则窗口标题默认为“pygame window”
class globalvar: #用类来封装全局变量,方便管理
def __init__(self):
self.mouseposition=(0,0)
self.交换栈=[]
self.i=0
self.横LENGTH=0
self.竖WIDTH = 0
self.r_data=None
self.g_data=None
self.b_data=None
globalvar=globalvar()
def 图片信息处理():
image = r'C:\Users\liuzc\Desktop\python试验\games\游戏图片\汤姆猫.jpeg'
img = Image.open(image)
globalvar.横LENGTH, globalvar.竖WIDTH = img.size
img = img.convert("RGB")
# 提取RGB元组
r, g, b = img.split()
# 获取像素点数据
globalvar.r_data = list(r.getdata())
globalvar.g_data = list(g.getdata())
globalvar.b_data = list(b.getdata())
图片信息处理()
screen = pygame.display.set_mode((800,800)) # 设置主屏窗口
class 单个像素(object):
def __init__(self,location,r,g,b):
self.location=location
self.Length =1
self.High = 1
self.surface=pygame.Surface((1,1)) #调大小的
self.color=r,g,b
self.surface.fill(self.color)
def refresh(self):
screen.blit(self.surface, (self.location[0],self.location[1]))
class 像素集合:
def __init__(self):
self.lst=[]
def add(self,location,g,b,k):
self.lst.append(单个像素(location,g,b,k))
def refresh(self):
for _ in self.lst:
_.refresh()
像素集合=像素集合()
t=0
for i in range(globalvar.竖WIDTH):
for j in range(globalvar.横LENGTH):
像素集合.add([j,i],globalvar.r_data[t],globalvar.g_data[t],globalvar.b_data[t]) #注意这里是j,i因为采样的时候是先横后竖的
t+=1
print(globalvar.竖WIDTH,globalvar.横LENGTH)
def GetEvent(): # 获取事
for event in pygame.event.get(): # 循环获取事件并监听事件状态
if event.type == pygame.MOUSEBUTTONDOWN:
globalvar.mouseposition=pygame.mouse.get_pos()
if event.type == pygame.QUIT: # 点击了关闭按钮
pygame.quit() # 卸载模块
sys.exit() # 退出程序
while True:
# 说明:while True循环可以使得主屏窗口得以保留
像素集合.refresh()
time.sleep(0.01) # 使得循环速度变慢,从而使得图片移动速度变慢
GetEvent() # 获取事件
pygame.display.update() # 更新

输出效果
本文介绍了如何使用Python的pygame库处理图像文件,提取RGB数据,并以像素集合的形式动态更新屏幕。通过鼠标事件控制像素位置的变化,实现了简单的图像动画效果。
2万+

被折叠的 条评论
为什么被折叠?



