gpt4 book ai didi

python - 在pygame中缩放图像后颜色错误

转载 作者:行者123 更新时间:2023-11-28 16:23:53 25 4
gpt4 key购买 nike

我有一张 64*64 像素的 TreeMap 片:

small image of a tree

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

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()

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

same image, resized

我的程序在什么时候决定改变两张图片的颜色?我该如何解决?

最佳答案

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

For alpha transparency, like in .png images use the convert_alpha()method after loading so that the image has per pixel transparency.

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

第二:文档中的 Blit 函数和每个标志的堆栈溢出解释:

  1. 文档:

blit(source, dest, area=None, special_flags = 0) -> Rect

An optional special flags is for passing in new in 1.8.0: BLEND_ADD,BLEND_SUB, BLEND_MULT, BLEND_MIN, BLEND_MAX new in 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 With other special blitting flags perhapsadded in the future.

For a surface with colorkey or blanket alpha, a blit to self may give slightly different colors than a non self-blit.

  1. 每个标志的堆栈溢出解释:

基本上,ADD 将两个源像素相加并在 255 处裁剪结果。SUB 减去两个像素并在 0 处裁剪。

MULT: result = (p1 * p2) / 256

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

MAX: Opposite of MIN (i.e. (100,10,100))

还有一个额外的混合模式,这在文档中并不明显:0(或只是将参数保留在外面)。此模式会将源表面“标记”到目标表面。如果源表面有 alpha channel ,这将决定每个像素的“强度”(0=无效果,255=复制像素,128:结果 = .5*源 + .5*目标)。

有用的效果:要使特定区域变暗,请使用混合模式 0,将源/图章表面填充为黑色并将 alpha 设置为 10:(0,0,0,10)

要使它变亮,请使用白色 (255,255,255,10)

我认为您的问题来自 alpha channel 。

所以:

spriteImage = pygame.image.load('Sprite-0003.png').convert_alpha()

形式:

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

What do the blend modes in pygame mean?

关于python - 在pygame中缩放图像后颜色错误,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/38183713/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com