Создайте 8-битный сжатый RGB с помощью PillowPython

Программы на Python
Anonymous
Создайте 8-битный сжатый RGB с помощью Pillow

Сообщение Anonymous »

Для моего студенческого проекта мне нужно преобразовать 4-байтовый цветной png-файл в 1-байтовый цветной png-файл с помощью Keil.
Я преобразовал png-файл в шестнадцатеричный файл с использованием Python, затем загрузил шестнадцатеричный файл в Keil, обработал данные и получил выходные данные.
В Keil шестнадцатеричный файл с 4-байтовым RGBA был изменен на 1 -byte RGB(RRR_GGG_BB в каждом байте) путем удаления альфа-канала и объединения 3 или 2 старших битов каждого цвета.
Процесс сжатия ДОЛЖЕН выполняться в keil.
Итак, выходной шестнадцатеричный файл содержит 1-байтовые данные RGB.
Я помещаю эти данные в Python, изменяю форму массива, но не могу преобразовать их в файл PNG.< /p>
Вот код, который я пробовал.

Код: Выделить всё

from intelhex import IntelHex
from PIL import Image
import numpy as np

ih = IntelHex()
ih.loadhex('memoutput.hex')
pydict=ih.todict()
rgbcomp = np.fromiter(pydict.values(), dtype=int)
rgbcomp = np.reshape(rgbcomp,(640,960))
img_2 = Image.fromarray(rgbcomp, 'P')
# https://pillow.readthedocs.io/en/stable/handbook/concepts.html#modes
img_2.show()
Каждые данные в массиве rgbcomp содержат 1-байтовые данные RGB (R[7:5]+G[7:5]+B[7:6]).Кто-нибудь знает, как с помощью подушки преобразовать массив в 256-цветный PNG?
Это должно выглядеть как полноцветное изображение, преобразованное в 256-цветное изображение в формате gif.
Это должно выглядеть как полноцветное изображение, преобразованное в 256-цветное изображение в формате GIF.
p>
Пожалуйста, помогите.
++ Добавлено в 14:15, 23 мая 2024 г.

Вот файл вывода memoutput keil .hex
А еще я почти закончил, что делаю pltePix - таргетинг на количество палитр, plte - палитру, которая разлагает RRRGGGBB на R[7:0], G[7:0] , Б[7:0]

Код: Выделить всё

from intelhex import IntelHex
from PIL import Image
import numpy as np

ih = IntelHex()
ih.loadhex('memoutput.hex')
pydict=ih.todict() #hex to dict
rgbcomp = np.fromiter(pydict.values(), dtype=int) #array of values in dict
uniqRgbComp = np.unique(rgbcomp) #int list of uniq colors
plte = np.zeros((len(uniqRgbComp),3)) #plte(24bit rgb) = uniqRgbComp(8bit rgb)
for i in range(len(uniqRgbComp)):
plte[i] = np.array([ int(uniqRgbComp[i]&0b11100000), int( ((uniqRgbComp[i])&0b00011100) 

Подробнее здесь: [url]https://stackoverflow.com/questions/78517573/create-8-bit-compressed-rgb-with-pillow[/url]

Вернуться в «Python»