我有一个功能强大的代码,用于22到22像素的位图,但是除了奇怪的事情之外,任何人都知道为什么? 该程序将用于自动化在我的世界中建造大型结构/可能是其他基于像素的'游戏。目前的状态是22比22像素,但不多了,我想知道为什么/如何解决它。
当前错误消息(对于超过22像素的图像): KeyError(搜索调色板时,原因:颜色不再是rgb的元组,而是一个未知原因的单个数字
所需的大小最多128到128,结果是(对于2乘1位图) - 简化,因为它可能必须是正方形: [(0,0,' 0-0-0',黑色),(0,1,' 255,255,255',白色)]
当前节目:
# palette.py
# Palette with rgb-values depicting different blocks in-game:
predef = {} #initialize a list variable, the fill it:
predef['255-255-255'] = 'air'
predef['255---0---0'] = 'redstone_block'
predef['--0--38-255'] = 'lapis_block'
predef['0-0-0'] = 'coal_block'
# main.py
from PIL import Image
import numpy as np
import json
import palette
def convert(filein, pal = palette.predef, zz = 0):
'''
due to a combined internal/external palette system ignore the warnings about incoherent types of str and dict
as the dict is the internal, and the str is the filename of a json containing a dict.
:param filein: Filename of bitmap
:param pal: blank to use internal, or specify a separate palette.json
:return:
'''
customset = [] # customset list for blocks and positions
if pal is not palette.predef:
with open(pal) as js:
pal = json.load(js)
#print(pal) #debug to check palette
im = Image.open(str(filein))
p = np.array(im) #.reshape(-1, 3)
print('width/height:', len(p), 'by', len(p))
for y in range(0, len(p)):
for x in range(0, len(p)):
pix = p[y][x]
pix = str(pix).replace(' ', '-').replace('[', '').replace(']', '')
print(pix)
pixcolor = (y, x, pix, pal[pix]) # Switch comment statu on these to see the error
#pixcolor = pix # instead of the error message
customset.append(pixcolor)
return customset
print(convert('./1.bmp', './palettetest.json') # works with a bitmap up to 22 by 22
答案 0 :(得分:0)
找到了解决方案:
来自PIL导入图片 导入numpy为np 导入json 进口时间 导入调色板#当我们有-0 --- 0 --- 0时,为什么需要这个? -Unknown
def convert(filein, pal = palette.predef, zz = 0):
'''
due to a combined internal/external palette system ignore the warnings about incoherent types of str and dict
as the dict is the internal, and the str is the filename of a json containing a dict.
:param filein: Filename of bitmap
:param pal: blank to use internal, or specify a separate palette.json
:return:
'''
customset = [] # customset list for blocks and positions
if pal is not palette.predef:
with open(pal) as js:
pal = json.load(js)
#print(pal)
photo = Image.open(filein) # opens the image
photo = photo.convert('RGB')
width = photo.size[0]
height = photo.size[1]
print('Size of current image is: {} by {}\n'.format(width, height))
for y in range(0, height):
row = ''
for x in range(0, width):
RGB = photo.getpixel((x,y)) # Gets the color value of pixel in color rgb
R, G, B = RGB # Splits the rgb values
rgb= str(RGB).replace(', ','-').replace('(', '').replace(')', '')
info = 'x: {}, y: {} - pixelcolor: {}, block: {}'.format(x, y, rgb, pal[rgb])
time.sleep(0.01) # to releave the cpu a bit
customset.append(info)
#print(info)
return customset
print(convert('./1.bmp'))