pygame的8位深图图与调色板研究

"""
   pygame的8位深图图与调色板研究
   pygame.surfarray.make_surface能转换一个2D阵列到一个8位深的表面。
   如果是3D阵列,那么就转换为32位深的表面。

   位深代表能显示的颜色数量,8位深的图能显示265种颜色。这个时候的数值是从0到255,
   但0到255的数值不代表一种颜色,而是代表一种颜色的索引号。
   Pygame不会存储具体的RGBA三元组值在内存中,而是存储一个整数。
   如果是大于8位深的图,那么这个整数可以解码成具体的RGBA值。
   如果是8位深的图,通过内置的调色板让每个整数对应一个RGBA值,
   这个调色板能通过surface.get_palette()获取,也可以通过命令
   surface.set_palette()设置调色板。       

"""

import pygame

width,height = 200,200

screen = pygame.display.set_mode((width,height))

# 8位深只支持256种颜色,下面把从0到99行列的像素设为:128,122,0这种颜色
# 而实际显示的是170,109,0这种调色板上的颜色
s = pygame.Surface((width,height),depth=8)
for x in range(100):
    for y in range(100):
        s.set_at((x,y),(128,122,0,255))
print("8位深的调色板",s.get_palette())
screen.blit(s,(0,0))

You must log in to read the rest of this article. Please log in or register as a user.