首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >在游戏中使用pixels_alpha设置α

在游戏中使用pixels_alpha设置α
EN

Stack Overflow用户
提问于 2013-07-06 19:00:33
回答 1查看 991关注 0票数 0

我正在使用游戏进行图像编辑(而不是显示)。(是的,我知道还有其他的选择,比如PIL/枕头,但玩偶游戏应该能做到这一点。)

我想要绘制和保存一个图像,我将根据公式单独设置每个像素的alpha值(我正在绘制一个复杂的RGBA配置文件)。看来pixels_alpha是正确的方法。但是当我改变pixels_alpha时,它就被忽略了,图像就会保持透明。这是我的密码。

代码语言:javascript
复制
import pygame as pg
import os
def init_transparent(img_width, img_height):
    """
    Create a new surface with width and height, starting with transparent
    background. This part works!
    """
    os.environ['SDL_VIDEODRIVER'] = 'dummy'
    pg.init()
    pg.display.init()
    # next command enables alpha
    # see http://stackoverflow.com/questions/14948711/
    pg.display.set_mode((img_width, img_height), 0, 32)
    # pg.SRCALPHA is a flag that turns on per-pixel alpha.
    return pg.Surface((img_width, img_height), pg.SRCALPHA)

def make_semitransparent_image():
    surf = init_transparent(20, 20)
    # alphas should be a direct reference to the alpha data in surf
    alphas = pg.surfarray.pixels_alpha(surf)
    # alphas is a uint8-dtype numpy array. Right now it's all zeros.
    for i in range(20):
        for j in range(20):
            # Since pixels_alpha gave me a uint8 array, I infer that
            # alpha=255 means opaque. (Right?)
            alphas[i,j] = 200
    pg.image.save(surf, '/home/steve/Desktop/test.png')

make_semitransparent_image()

同样,它保存了一个图像,但是无论我将alphas设置为什么值,图像看起来都是完全透明的。我在这里做错什么了?(使用Python2.7,pyplay1.9.1发行版)(事先谢谢!)

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2013-07-07 15:40:43

Pygame说,只要结果数组存在,pixels_array()就会锁定该曲面,并且锁定的曲面可能无法正确绘制。情况似乎是,它们也没有被正确保存。在调用image.save()之前,需要丢弃alphas对象。这可以通过在del alphas之前添加image.save()来实现。

(请注意,这更多地是一种解决办法,而不是一种适当的解决办法。添加del alphas只能对CPython (而不是PyPy、Jython、IronPython)产生可靠的影响。也许你真的可以“关闭”一个超视距对象,就像你可以关闭一个文件或者仅仅忘记它一样?)

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/17506098

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档