gpt4 book ai didi

python - 使用 pygame/pyglet 从数组重建图像时颜色不正确

转载 作者:太空宇宙 更新时间:2023-11-03 19:03:44 25 4
gpt4 key购买 nike

我编写了这个程序,它使用 numpy 和 Image(PIL) 库将图像读取为一堆矩阵,并使用 pyglet(和 opengl)重建图像。

使用pyglet的代码如下:

import Image
import numpy
import window
import sys
import pyglet
import random
a=numpy.asarray(Image.open(sys.argv[1]))
h,w= a.shape[0],a.shape[1]
s=a[0]
print s.shape

#######################################
def display():
x_a=0;y_a=h
for page in a:
for array in page:
j=array[2]
k=array[1]
l=array[0]
pyglet.gl.glColor3f(l,j,k)
pyglet.gl.glVertex2i(x_a,y_a)
x_a+=1
y_a-=1
x_a=0
######################################33
def on_draw(self):
global w,h

self.clear
pyglet.gl.glClear(pyglet.gl.GL_COLOR_BUFFER_BIT)
pyglet.gl.glBegin(pyglet.gl.GL_POINTS)
display()
pyglet.gl.glEnd()
pyglet.image.get_buffer_manager().get_color_buffer().save('screenshot.png')
window.win.on_draw=on_draw

#######################################

u=window.win(w,h)
pyglet.app.run()

修改相同的代码以使用 pygame 库(并且没有任何 opengl 使用)

import pygame
import numpy
import Image
import sys
from pygame import gfxdraw

color=(255,255,255)

a=numpy.asarray(Image.open(sys.argv[1]))
h,w=a.shape[0],a.shape[1]

pygame.init()
screen = pygame.display.set_mode((w,h))

def uu():
y_a=0
for page in a:
x_a=0
for array in page:
co=(array[0],array[1],array[2])
pygame.gfxdraw.pixel(screen,x_a,y_a,co)
x_a+=1
y_a+=1

uu()
done = False

while not done:
for event in pygame.event.get():
if event.type == pygame.QUIT:
done = True

pygame.display.flip()

pyglet 与 pygame 的结果:

pyglet vs pygame

所以我的问题是...为什么会出现问题?我使用 opengl 逐像素绘制图片的方式是否存在问题,或者还有其他目前超出我理解范围的问题?

最佳答案

Pygame.Color 需要 0-255 范围内的整数,而 pyglet.gl.glColor3f 需要 0.0-1.0 范围内的 float 。像这样的转换应该可以解决您的问题:

j=array[0] / 255.0
k=array[1] / 255.0
l=array[2] / 255.0
pyglet.gl.glColor3f(j,k,l)

关于python - 使用 pygame/pyglet 从数组重建图像时颜色不正确,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/15311570/

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