首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >在电子游戏中缩放图像后出现的颜色错误

在电子游戏中缩放图像后出现的颜色错误
EN

Stack Overflow用户
提问于 2016-07-04 11:32:31
回答 2查看 1.1K关注 0票数 3

我有一棵树的64*64 of图像:

我希望在运行时将此图像调整为全屏模式。我试图为此编写一些代码(见下文)。在执行这个程序之后

代码语言:javascript
运行
复制
import pygame, sys

pygame.init()

info = pygame.display.Info()
WINDOWHEIGHT = info.current_h
WINDOWWIDTH = info.current_w

DISPLAYSURF = pygame.display.set_mode((WINDOWWIDTH,WINDOWHEIGHT),pygame.FULLSCREEN)

spriteImage = pygame.image.load('Sprite-0003.png')
spriteSurf = pygame.Surface((WINDOWWIDTH,WINDOWHEIGHT))
pygame.transform.scale(spriteImage, (WINDOWWIDTH,WINDOWHEIGHT), spriteSurf)

def close():
    pygame.quit()
    sys.exit()

while True:
    for event in pygame.event.get():
        if event.type == pygame.QUIT:
            close()
        if event.type == pygame.KEYDOWN:
            if event.key == pygame.K_ESCAPE:
                close()

    DISPLAYSURF.blit(spriteSurf, (0,0))
    pygame.display.update()

我得到了这个结果图像。比较它们的颜色:

我的程序在什么时候决定改变这两幅图像的颜色?我该怎么解决呢?

EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2016-07-04 11:48:55

首先:看看pygame.image.load():

对于alpha透明性,就像在.png图像中一样,在加载后使用convert_alpha()方法,使图像具有每个像素的透明度。

http://www.pygame.org/docs/ref/image.html#pygame.image.load

第二:来自文档的Blit函数和每个标志的堆栈溢出说明:

  1. 文档:

blit(源,area=None,special_flags = 0) -> Rect 一个可选的特殊标志用于在1.8.0中传递新的( BLEND_ADD、BLEND_SUB、BLEND_MULT、BLEND_MIN、BLEND_MAX new在1.8.1中):BLEND_RGBA_ADD、BLEND_RGBA_SUB、BLEND_RGBA_MULT、BLEND_RGBA_MIN、BLEND_RGBA_MAX BLEND_RGB_ADD、BLEND_RGB_SUB、BLEND_RGB_MULT、BLEND_RGB_MIN、BLEND_RGB_MAX,以及将来可能添加的其他特殊闪电号。 对于带有颜色键或毯子α的表面,blit to self可能会给出与非自blit稍微不同的颜色。

  1. 每个标志的堆栈溢出说明:

基本上,ADD添加两个源像素并在255处剪辑结果。在0处减去两个像素和剪辑。

代码语言:javascript
运行
复制
MULT: result = (p1 * p2) / 256

MIN:选择每个通道的较低值(不是整个像素),所以如果pixel1是(100,10,0),而pixel2是(0,10,100),则得到(0,10,0)

代码语言:javascript
运行
复制
MAX: Opposite of MIN (i.e. (100,10,100))

还有一种额外的混合模式,这在docs中并不明显:0(或者将参数排除在外)。此模式将“盖章”源表面到目标。如果源面有一个alpha通道,这将决定每个像素是否“强”为(0=no effect, 255=copy pixel, 128: result = .5*source + .5*destination).

有用的效果:要使某一区域变暗,使用混合模式0,填充源/邮票表面黑色,并将alpha设置为10:(0,0,0,10)

要减轻它,请使用白色(255,255,255,10)

我想你的问题来自阿尔法频道。

所以:

代码语言:javascript
运行
复制
spriteImage = pygame.image.load('Sprite-0003.png').convert_alpha()

Fom:

http://www.pygame.org/docs/ref/surface.html#pygame.Surface.blit

What do the blend modes in pygame mean?

票数 3
EN

Stack Overflow用户

发布于 2016-07-04 12:02:05

源曲面(来自图像)和目标曲面不使用相同的彩色键

使用默认构造函数pygame.Surgafe,您将得到一个没有默认初值的曲面。

曲面可以有许多额外的属性,如alpha平面,彩色键,源矩形裁剪。这些功能主要影响曲面如何被切割到其他表面。blit例程将尝试在可能的情况下使用硬件加速,否则它们将使用高度优化的软件闪存方法。

让我们考虑复制初乳,或者(最好)克隆图像曲面并对其进行缩放。

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

https://stackoverflow.com/questions/38183713

复制
相关文章

相似问题

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