仅多边形中的 Pygame alpha [重复]

2024-04-20

我目前正在制作一个 pygame 代码,在现有 JPG 之上绘制多边形。

我所做的是绘制 2 个曲面,一个用于底部的背景 JPG,另一个用于顶部的多边形。对于多边形表面,我需要为表面赋予“SRCALPHA”属性,以便背景填充不会阻挡背景 JPG 的视图。但是,当我这样做时,我无法使用多边形 surface.set_alpha 来控制多边形的透明度。

执行此操作的方法是什么,或者我应该完全改变我的方法吗?

编辑: 这个问题解决后,我又遇到了类似的问题,请参阅Python pygame alpha 文本 https://stackoverflow.com/questions/63597415/python-pygame-alpha-in-text如果您知道解决方案,请帮助我。非常感谢。


您正在将两种不需要(也不能混合)的东西混合在一起。但是您不需要使用set_alpha()实现你想要的。

SRCALPHA告诉它您将在该表面上使用每个像素 alpha。如果您阅读了文档here https://www.pygame.org/docs/ref/surface.html你会发现它说“SRCALPHA 像素格式将包含每像素 alpha”。Here https://www.pygame.org/docs/ref/surface.html#pygame.Surface.set_alpha你会看到文档set_alpha()表明它与每像素 alpha 不兼容“对于具有每像素 alpha 的表面,毯子 alpha 被忽略”(除非您使用的是我怀疑的 pygame 2)。

根据您对问题的描述,我怀疑您是否需要 set_alpha 。如果您已创建上表面以使用“SRCALPHA”的每像素 alpha,那么您未绘制的像素将已经是透明的。当您将其位块传输到另一个表面上时,仅应传输您绘制的多边形。

这是一个例子:

GREEN = pygame.Color('green')
RED = pygame.Color('red')

size = (800, 400)
    
pygame.init()
screen = pygame.display.set_mode(size)

lowersurf = pygame.Surface(size)
lowersurf.fill(GREEN)

polysurf = pygame.Surface(size, flags=pygame.SRCALPHA)
pygame.draw.polygon(polysurf, RED, ((100, 100), (600, 100), (600, 200), (350, 300), (100, 200)), 4)

lowersurf.blit(polysurf, (0, 0))

screen.blit(lowersurf, (0, 0))
pygame.display.flip()

它在透明上绘制多边形轮廓polysurf然后将其传输到正常的lowersurf.

然后它会传输结果lowersurf到屏幕上。

Edit:

在评论中,OP询问如何将多边形绘制到lowersurf透明度,使其具有 50% 的透明度。一种方法是将图像绘制到polysurf与部分透明。像这样:

GREEN = pygame.Color('green')
RED = pygame.Color('red')

transparent_red = RED
transparent_red[3] = 125

size = (800, 400)
    
pygame.init()
screen = pygame.display.set_mode(size)

lowersurf = pygame.Surface(size)
lowersurf.fill(GREEN)

polysurf = pygame.Surface(size, flags=pygame.SRCALPHA)
pygame.draw.polygon(polysurf, transparent_red, ((100, 100), (600, 100), (600, 200), (350, 300), (100, 200)), 4)

lowersurf.blit(polysurf, (0, 0))

screen.blit(lowersurf, (0, 0))
pygame.display.flip()

这会创建一种颜色transparent_red即 50% 透明。颜色中的第四个参数是 alpha 值,其范围从 0(完全透明)到 255(完全不透明),因此 125 是一半。

另一种方法(可能是您真正想要的)是对整个polysurf而不仅仅是绘制在其上的特定事物。按照最初的方式绘制整个 Polysurf,然后在绘制之前调整整个表面的 Alpha。像这样:

GREEN = pygame.Color('green')
RED = pygame.Color('red')

size = (800, 400)

blend_alpha = 125
    
pygame.init()
screen = pygame.display.set_mode(size)

lowersurf = pygame.Surface(size)
lowersurf.fill(GREEN)

polysurf = pygame.Surface(size, flags=pygame.SRCALPHA)
pygame.draw.polygon(polysurf, RED, ((100, 100), (600, 100), (600, 200), (350, 300), (100, 200)), 4)

transparent_polysurf = polysurf.copy()
transparent_polysurf.fill((255, 255, 255, blend_alpha), special_flags=pygame.BLEND_RGBA_MULT)

lowersurf.blit(transparent_polysurf, (0, 0))

screen.blit(lowersurf, (0, 0))
pygame.display.flip()

在这个例子中我复制了polysurf然后使用fill()使用special_flags=pygame.BLEND_RGBA_MULT(参见文档here https://www.pygame.org/docs/ref/surface.html#pygame.Surface.fill)在副本上使其在位图复制之前部分透明。我这样做了,所以原来的不受影响,但如果你不在乎,那么你可以进行混合fill()直接在polysurf无需复印。

正如我所说,您可能想采用最后一种方法,因为它融合了来自polysurf具有相同的透明度。如果您想混合不同的事物,另一种方法很有用polysurf具有不同的透明度级别。

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

仅多边形中的 Pygame alpha [重复] 的相关文章

  • 将数据帧行转换为字典

    我有像下面的示例数据这样的数据帧 我正在尝试将数据帧中的一行转换为类似于下面所需输出的字典 但是当我使用 to dict 时 我得到了索引和列值 有谁知道如何将行转换为像所需输出那样的字典 任何提示都非常感激 Sample data pri
  • Pandas 中允许重复列

    我将一个大的 CSV 包含股票财务数据 文件分割成更小的块 CSV 文件的格式不同 像 Excel 数据透视表之类的东西 第一列的前几行包含一些标题 公司名称 ID 等在以下列中重复 因为一家公司有多个属性 而不是一家公司只有一栏 在前几行
  • 填充两个函数之间的区域

    import matplotlib pyplot as plt import numpy as np def domain x np arange 0 10 0 001 f1 lambda x 2 x x 2 0 5 plt plot x
  • 从零开始的 numpy 形状意味着什么

    好的 我发现数组的形状中可以包含 0 对于将 0 作为唯一维度的情况 这对我来说是有意义的 它是一个空数组 np zeros 0 但如果你有这样的情况 np zeros 0 100 让我很困惑 为什么这么定义呢 据我所知 这只是表达空数组的
  • 切片 Dataframe 时出现 KeyError

    我的代码如下所示 d pd read csv Collector Output csv df pd DataFrame data d dfa df copy dfa dfa rename columns OBJECTID Object ID
  • 使用 Python pandas 计算调整后的成本基础(股票买入/卖出的投资组合分析)

    我正在尝试对我的交易进行投资组合分析 并尝试计算调整后的成本基础价格 我几乎尝试了一切 但似乎没有任何效果 我能够计算调整后的数量 但无法获得调整后的购买价格有人可以帮忙吗 这是示例交易日志原始数据 import pandas as pd
  • 使用 OLS 回归预测未来值(Python、StatsModels、Pandas)

    我目前正在尝试在 Python 中实现 MLR 但不确定如何将我找到的系数应用于未来值 import pandas as pd import statsmodels formula api as sm import statsmodels
  • 如何设置 Celery 来调用自定义工作器初始化?

    我对 Celery 很陌生 我一直在尝试设置一个具有 2 个独立队列的项目 一个用于计算 另一个用于执行 到目前为止 一切都很好 我的问题是执行队列中的工作人员需要实例化一个具有唯一 object id 的类 每个工作人员一个 id 我想知
  • 首先对列表中最长的项目进行排序

    我正在使用 lambda 来修改排序的行为 sorted list key lambda item item lower len item 对包含元素的列表进行排序A1 A2 A3 A B1 B2 B3 B 结果是A A1 A2 A3 B
  • 在 Pandas 中使用正则表达式的多种模式

    我是Python编程的初学者 我正在探索正则表达式 我正在尝试从 描述 列中提取一个单词 数据库名称 我无法给出多个正则表达式模式 请参阅下面的描述和代码 描述 Summary AD1 Low free DATA space in data
  • gitlab-ci 的缓存虚拟环境

    我使用 Gitlab CI 脚本缓存了 Pip 包 所以这不是问题 现在我还想赶上Conda虚拟环境 因为它减少了设置环境的时间 我缓存了一个虚拟环境 不幸的是 最后需要很长时间才能缓存所有 venv 文件 我尝试仅缓存 CI PROJEC
  • 默认情况下,Keras 自定义层参数是不可训练的吗?

    我在 Keras 中构建了一个简单的自定义层 并惊讶地发现参数默认情况下未设置为可训练 我可以通过显式设置可训练属性来使其工作 我无法通过查看文档或代码来解释为什么会这样 这是应该的样子还是我做错了什么导致默认情况下参数不可训练 代码 im
  • Ubuntu 上的 Python 2.7

    我是 Python 新手 正在 Linux 机器 Ubuntu 10 10 上工作 它正在运行 python 2 6 但我想运行 2 7 因为它有我想使用的功能 有人敦促我不要安装 2 7 并将其设置为我的默认 python 我的问题是 如
  • 限制 django 应用程序模型中的单个记录?

    我想使用模型来保存 django 应用程序的系统设置 因此 我想限制该模型 使其只能有一条记录 极限怎么办 尝试这个 class MyModel models Model onefield models CharField The fiel
  • 如何读取Python字节码?

    我很难理解 Python 的字节码及其dis module import dis def func x 1 dis dis func 上述代码在解释器中输入时会产生以下输出 0 LOAD CONST 1 1 3 STORE FAST 0 x
  • 检查字典键是否有空值

    我有以下字典 dict1 city name yass region zipcode phone address tehsil planet mars 我正在尝试创建一个基于 dict1 的新字典 但是 它不会包含带有空字符串的键 它不会包
  • Python 无法使用套接字绑定我的外部/公共 IP 地址,给出错误但是当使用本地 IP 地址时,错误不会显示

    这是出现主要错误的代码 与我的本地 IP 的绑定将起作用 s bind 192 168 1 4 port 与我的公共 IP 的绑定失败并出现以下错误 s bind 99 99 99 99 port WinError 10049 请求的地址在
  • 迭代 pandas 数据框的最快方法?

    如何运行数据框并仅返回满足特定条件的行 必须在之前的行和列上测试此条件 例如 1 2 3 4 1 1 1999 4 2 4 5 1 2 1999 5 2 3 3 1 3 1999 5 2 3 8 1 4 1999 6 4 2 6 1 5 1
  • 您可以使用关键字参数而不提供默认值吗?

    我习惯于在 Python 中使用这样的函数 方法定义 def my function arg1 None arg2 default do stuff here 如果我不供应arg1 or arg2 那么默认值None or default
  • Scrapy Spider不存储状态(持久状态)

    您好 有一个基本的蜘蛛 可以运行以获取给定域上的所有链接 我想确保它保持其状态 以便它可以从离开的位置恢复 我已按照给定的网址进行操作http doc scrapy org en latest topics jobs html http d

随机推荐