小学生python游戏编程arcade----坦克换色

news2024/11/28 0:40:55

小学生python游戏编程arcade----坦克换色

    • 前言
    • 坦克换色
      • 1、RGB颜色
        • 1.1 RGB
        • 1.2 PIL 模块中的image
        • 1.3 效果图![在这里插入图片描述](https://img-blog.csdnimg.cn/f533a0bed98f4b49a462a2f056c35786.png)#### 1.4 代码实现
        • 1.5 总结
      • 2、RGB转换为HSV
        • 2.1 RGB
        • 2.2 HSV
        • 2.3 python RGB 转HSV colorsys.rgb_to_hsv
        • 2.4 效果
        • 2.4 代码实现
      • 3 转换为函数,以便游戏中调用
    • 总结
    • 源码获取

前言

接上篇文章继续解绍arcade游戏编程的基本知识。坦克换颜色,arcade texture类的学习

坦克换色

1、RGB颜色

1.1 RGB

RGB色彩就是常说的三原色,R代表Red(红色),G代表Green(绿色),B代表Blue(蓝色)。自然界中肉眼所能看到的任何色彩都可以由这三种色彩混合叠加而成,因此也称为加色模式。
如:
(0, 0, 0) 代表 RGB 都是没有的,呈现黑色。
(255, 255, 255) 代表 RGB 都是满的,呈现白色。
(0, 255, 255) 代表 R 无,G 是满的,B 是满的,蓝色和绿色混合呈现出青色。
因此,通过这三个数值的表示,我们就可以实现各种颜色的呈现。

1.2 PIL 模块中的image

print(‘图片大小’,img.size)#打印图片大小
print(‘图片34,34处颜色’,img.getpixel((24,34)))

1.3 效果图在这里插入图片描述#### 1.4 代码实现

from PIL import Image

i = 1
j = 1
img = Image.open("images/坦克2.png")#读取系统的内照片
print('图片大小',img.size)#打印图片大小
print('图片34,34处颜色',img.getpixel((24,34)))

width = img.size[0]#长度
height = img.size[1]#宽度

for i in range(0,width):#遍历所有长度的点
    for j in range(0,height):#遍历所有宽度的点
        data = (img.getpixel((i,j)))#打印该图片的所有点
        print(data)#打印每个像素点的颜色RGBA的值(r,g,b,alpha)
        print(data[0])#打印RGBA的r值

        if (data[0] >= 57) and (data[0] <= 100):
            img.putpixel((i, j), (234, 53, 57, 255))  # 则这些像素点的颜色改成大红色

img = img.convert("RGB")  # 把图片强制转成RGB
img.show()

1.5 总结

此法适合换单色的图片,某一类颜色的更换,如换背景色。

2、RGB转换为HSV

2.1 RGB

RGB 是根据颜色发光的原理来设计的,比如这里有红绿蓝三道光,当三束光混合在一起的时候,其呈现的最终的光效颜色就取决于这三种原色光的强弱了。

2.2 HSV

HSV 是一种颜色空间分布,包括以下三个维度:
hue 色调 | saturation 饱和度 | value 亮度
三个维度的不同组合,可以形成不同的颜色,通常用一个圆锥表示:
在这里插入图片描述
详细可参看https://blog.csdn.net/qq_38423499/article/details/104682039

2.3 python RGB 转HSV colorsys.rgb_to_hsv

colorsys.py中的rgb_to_hsv

# HSV: Hue, Saturation, Value
# H: position in the spectrum
# S: color saturation ("purity")
# V: color brightness

def rgb_to_hsv(r, g, b):
    maxc = max(r, g, b)
    minc = min(r, g, b)
    v = maxc
    if minc == maxc:
        return 0.0, 0.0, v
    s = (maxc-minc) / maxc
    rc = (maxc-r) / (maxc-minc)
    gc = (maxc-g) / (maxc-minc)
    bc = (maxc-b) / (maxc-minc)
    if r == maxc:
        h = bc-gc
    elif g == maxc:
        h = 2.0+rc-bc
    else:
        h = 4.0+gc-rc
    h = (h/6.0) % 1.0
    return h, s, v

2.4 效果

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

2.4 代码实现

# _*_ coding: UTF-8 _*_
# 开发团队: 信息化未来
# 开发人员: Administrator
# 开发时间:2022/11/27 12:24
# 文件名称: 图片换色.py
# 开发工具: PyCharm

from PIL import Image
import colorsys


image = Image.open("images/坦克2.png").convert('RGB')  # 读取系统的内照片
# 将 RGB 色值分离
image.load()
r, g, b = image.split()
result_r, result_g, result_b = [], [], []
# 依次对每个像素点进行处理
for pixel_r, pixel_g, pixel_b in zip(r.getdata(), g.getdata(), b.getdata()):
    # 转为 HSV 色值
    h, s, v = colorsys.rgb_to_hsv(pixel_r / 255., pixel_b / 255., pixel_g / 255.)
    # 转回 RGB 色系的过程中修改h
    # 可自行调整h为0-1的大小,改变图片颜色,s、v代表无需改变,三个参数分别代表色调、饱和度、明度。
    rgb = colorsys.hsv_to_rgb(h+0.3, s, v)
    pixel_r, pixel_g, pixel_b = [int(x * 255.) for x in rgb]
    # 每个像素点结果保存
    result_r.append(pixel_r)
    result_g.append(pixel_g)
    result_b.append(pixel_b)


r.putdata(result_r)
g.putdata(result_g)
b.putdata(result_b)


# 合并图片
image = Image.merge('RGB', (r, g, b))
image.show()

3 转换为函数,以便游戏中调用

from PIL import Image
import colorsys


def change_color_pic(fimage,H_add=0.4):
    image=fimage.convert('RGB')
    # 将 RGB 色值分离
    image.load()
    r, g, b = image.split()
    result_r, result_g, result_b = [], [], []
    # 依次对每个像素点进行处理
    for pixel_r, pixel_g, pixel_b in zip(r.getdata(), g.getdata(), b.getdata()):
        # 转为 HSV 色值
        h, s, v = colorsys.rgb_to_hsv(pixel_r / 255., pixel_b / 255., pixel_g / 255.)
        # 转回 RGB 色系的过程中修改h
        # 可自行调整h为0-1的大小,改变图片颜色,s、v代表无需改变,三个参数分别代表色调、饱和度、明度。
        rgb = colorsys.hsv_to_rgb(h+H_add, s, v)
        pixel_r, pixel_g, pixel_b = [int(x * 255.) for x in rgb]
        # 每个像素点结果保存
        result_r.append(pixel_r)
        result_g.append(pixel_g)
        result_b.append(pixel_b)
    r.putdata(result_r)
    g.putdata(result_g)
    b.putdata(result_b)
    # 合并图片
    return Image.merge('RGB', (r, g, b))


pic = Image.open("images/坦克2.png")  # 读取系统的内照片
newimg = change_color_pic(pic)
newimg.show()

总结

第二种方法较适合我们游戏的制作,只需更改一个参数,可以制造出很多类似的敌机坦克。

源码获取

关注博主后,私聊博主免费获取
需要技术指导,育娃新思考,企业软件合作等更多服务请联系博主

今天是以此模板持续更新此育儿专栏的第 34/50次。
可以关注我,点赞我、评论我、收藏我啦。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/42065.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

《前端框架开发技术》HTML+CSS+JavaScript 制作个人简历模板

&#x1f389;精彩专栏推荐&#x1f447;&#x1f3fb;&#x1f447;&#x1f3fb;&#x1f447;&#x1f3fb; ✍️ 作者简介: 一个热爱把逻辑思维转变为代码的技术博主 &#x1f482; 作者主页: 【主页——&#x1f680;获取更多优质源码】 &#x1f393; web前端期末大作业…

23、Mybatis查询功能4(查询结果为一个map集合(多条数据))

Mybatis查询功能4&#xff08;查询结果为一个map集合&#xff08;多条数据&#xff09;&#xff09; 可以用Lsit集合接收可以用MapKey注解设置键&#xff08;用一个唯一标识&#xff09;第一步&#xff1a; 第二步&#xff1a; 第三步&#xff1a;

我的第一个Servlet程序,并理解浏览器和代码如何关联在一起

目录 Servlet 第一个Servlet程序 1.创建项目 maven是什么 如何创建maven项目 2.引入Servlet依赖 找到库中maven代码 3.创建目录结构 4.编写代码 理解注解Webserlet 5.打包程序 生成war包 6.部署程序 7.验证程序 二.理解浏览器发的请求是怎么和自己写的代码建立联…

景联文智能标注平台将数据处理效率提升十倍以上!数据精准度最高可达99%

目前主流的机器学习方式是以有监督的深度学习方式为主&#xff0c;这对标注数据有着强较依赖性需求&#xff0c;未经标注处理过的原始数据多以非结构化数据为主&#xff0c;这些数据难以被机器识别和学习。这就需要标注员借助数据标注工具对数据进行标注。 使用高效率的标注工具…

如何知道你的Linux内核占用的内存大小?

如何知道你的Linux内核占用的内存大小&#xff1f;1、代码段等2、kernel heap2.1、kmalloc2.2、vmalloc3、进程的页表4、内核占用内存大小总和1、代码段等 内核所需的代码段、bss段&#xff0c;内核栈等。 / # dmesg | grep Memory Memory policy: Data cache writealloc M…

springboot使用mybatis

springboot使用mybatis 本文目录springboot使用mybatis引入maven依赖新增数据库配置创建数据库表实体类编写mapper接口层通过xml文件mapper中直接使用注解编写mapper.xmlIDEA创建mybatis的xml文件parameterType启动类controller调用引入maven依赖 <dependency><groupI…

视频转音频怎么转?来试试这三个方法

如今我们可以看到有一些人会把电影/电视变成听电影/电视&#xff0c;相信大家都会感觉很不可思议吧&#xff01;电影/电视不是用来看的吗&#xff1f;听就没办法享受到那种视觉上的震撼了&#xff0c;其实不然&#xff0c;听电影/电视也是一种别样的享受&#xff0c;特别是对有…

看完这篇还不懂MySQL的MVCC机制算我输

前言 MySQL中大名鼎鼎的MVCC机制想必大家都有所耳闻吧&#xff0c;虽然在平时MySQL使用过程中基本上用不到&#xff0c;但是面试中出场率十分高&#xff0c;而且作为架构师的你也是需要知道它的工作机制。那么你对MVCC机制了解多少呢&#xff1f;MVCC机制是用来干嘛的呢&#…

使用 Clion (cmake) 开发FreeRTOS

这里使用的是 f4071. 先用STM32CubeMX 建立一个可以运行的stm32项目&#xff0c;toolchain选择 SW4STM322. 官网下载源码www.freertos.org我这里下载的是FreeRTOSv202112.00.zip 解压缩后得到需要以下几个文件夹或档案FreeRTOS/Source下的所有的 .c 档案FreeRTOS/Source/includ…

m基于GA遗传优化的GRNN广义回归神经网络销售数据预测算法matlab仿真

目录 1.算法描述 2.仿真效果预览 3.MATLAB核心程序 4.完整MATLAB 1.算法描述 随着市场经济的发展和全球化&#xff0c;国内外企业面临着越来越残酷的市场竞争&#xff0c;要想赢得竞争&#xff0c;赢得市场&#xff0c;从事商品销售的单位必须在短时间内&#xff0c;以最低…

【图多预警】Pandas绘图函数总结

文章目录简介条形图折线图箱线图直方图饼图散点图和六边形分箱图简介 pandas中提供了plot函数用以绘图&#xff0c;并通过kind参数选择具体的图像类型。 method绘图类别method绘图类别line折线图[默认使用]area堆叠面积图bar纵向条形图barh横向条形图kde概率分布图density概率…

企企通:数字化浪潮下,企业如何利用间接采购策略,实现降本增效?

01、什么是间接采购&#xff1f; 通常&#xff0c;我们将采购分为直接物料和间接物料。 直接采购&#xff1a;用于产品生产及销售的物料与服务的购买&#xff0c;服务于外部客户&#xff0c;也叫生产性采购。如原材料、产品包装、物流服务等。直接采购无论是生产所需的原材料、…

backup (攻防世界)

前言: 这篇文章还是是为了帮助一些 像我这样的菜鸟 找到简单的题解 题目描述 进入网址 解题工具: 浏览器? 问题解析: X老师忘记删除备份文件&#xff0c;他派小宁同学去把备份文件找出来,一起来帮小宁同学吧&#xff01; 先说一下备份文件 科普时间叕到 网站备份 分…

怎样录屏没有外界杂音?3个十分好用的方法,码住收藏!

在互联网时代&#xff0c;使用电脑娱乐、工作逐渐成为了日常生活的一部分。而其中&#xff0c;电脑录屏是经常使用的功能之一。不过对于电脑录屏领域不熟悉的小伙伴就会问了&#xff1a;“为什么录制的视频会有杂音&#xff0c;怎样录屏没有外界杂音&#xff1f;”别着急&#…

对于xshell连接不上虚拟机的一些解答

如果你发现你可以在虚拟机内ping通 之后&#xff0c;在你电脑dos下也可以ping通。 然而&#xff0c;还是发现你的xshell连接不上虚拟机。 这里使用ifconfig 我发现这个地址是在变化的&#xff0c;之前是129&#xff0c;现在是131&#xff0c;所以这样再到xshell&#xff0c;…

【Java面试】谈谈你对HashMap的理解(Map接口)

文章目录说一下 HashMap 的实现原理&#xff1f;HashMap在JDK1.7和JDK1.8中有哪些不同&#xff1f;HashMap的底层实现&#xff1f;HashMap的put方法的具体流程&#xff1f;HashMap的扩容操作是怎么实现的&#xff1f;HashMap是怎么解决哈希冲突的&#xff1f;能否使用任何类作为…

C++ Reference: Standard C++ Library reference: Containers: deque: deque: rbegin

C官网参考链接&#xff1a;https://cplusplus.com/reference/deque/deque/rbegin/ 公有成员函数 <deque> std::deque::rbegin C98 reverse_iterator rbegin(); const_reverse_iterator rbegin() const; C11 reverse_iterator rbegin() noexcept; const_reverse_iterato…

类加载机制和类加载器

文章目录类加载机制为什么需要类加载类加载的时机主动使用——会触发类的初始化被动使用的例子关于接口的初始化类加载详细过程加载链接初始化类加载器类与类加载器,类的实例的关系回顾类的卸载类加载的基本特征类加载器的分类Java虚拟机自带的类加载器用户自定义类加载器Class…

web前端期末大作业 在线电影网页设计与制作 HTML+CSS+JavaScript仿叮当电影网页制作

HTML实例网页代码, 本实例适合于初学HTML的同学。该实例里面有设置了css的样式设置&#xff0c;有div的样式格局&#xff0c;这个实例比较全面&#xff0c;有助于同学的学习,本文将介绍如何通过从头开始设计个人网站并将其转换为代码的过程来实践设计。 文章目录一、网页介绍一…

【Elasticsearch】kibana 操作es文档详细总结

前言 在上一篇&#xff0c;分享了使用kibana如何对索引进行增删改查等操作&#xff0c;事实上在日常开发与运维中&#xff0c;操作索引毕竟是比较谨慎的事情&#xff0c;但是对于索引中文档的增删查改却是随处可见的&#xff0c;es对文档的操作不仅频繁&#xff0c;而且涉及到…