[Date Prev][Date Next] [Thread Prev][Thread Next] [Date Index] [Thread Index]

Re: How are CHRP bootinfo icons formatted?



On Sun, Jun 04, 2023 at 12:45:48AM -0400, Ben Westover wrote:
> On 6/3/23 3:58 PM, Ben Westover wrote:
> > I don't think I really did. All I did was guess that the colors are
> > stored in some sort of 3,3,2 8 bit color format since that's what
> > standard CHRP does. My method for converting RGB pixels into 3,3,2 was
> > based on a Stack Overflow answer that I'm not so sure was accurate.
> 
> I tried something else; while I'm not quite there yet, I think I'm getting
> closer. My last palette based on a Stack Overflow answer incremented the red
> and green by 32, giving a range from 0x00 to 0xE0, and the blue by 64,
> giving a range from 0x00 to 0xC0.
> I created a new palette incrementing red and green by 36, giving a range
> from 0x00 to 0xFC, and blue by 85, which gives the complete range of color
> from 0x00 to 0xFF. This is much better coverage than before, and the new
> palette as well as a new script that uses it is attached.

That's better, but even the 8 level palette should go from 0 to 0xff:
the best mapping for 3 bit color channels is to multiply by 255/7 and
then round to the nearest channel.

So the range should be more like 0, 36, 73, 109, 146, 182, 219, 255. The
extremes have to be mapped to the extremes.

> 
> The reason why I think the new palette is closer than the old one is that I
> no longer need to invert the Debian logo's colors to make it look right. The
> red is also a lot darker than it was before, going from almost pink to a
> sort of burgundy. It's still not quite right, though, as more complex images
> still look completely wrong.

With 3/3/2 it's impossible to produce photo realistic images. Even 16
bit, which is RGB 565 if memory serves (not used in well over a decade),
gives quite a few artefacts.

	Cheers,
	Gabriel


> 
> --
> Ben Westover

> from PIL import Image
> from more_itertools import chunked
> img = Image.open('image.png')
> pixels = []
> 
> for i in range(0, 16):
>     for j in range(0, 16):
>         pixels.append(img.getpixel((j, i)))
> 
> bmp1_values = []
> for pixel in pixels:
>     red = format(round(pixel[0] / 36), 'b').zfill(3)
>     green = format(round(pixel[0] / 36), 'b').zfill(3)
>     blue = format(round(pixel[0] / 85), 'b').zfill(2)
>     bmp1_values.append(format(int(red + green + blue, 2), 'X').zfill(2))
> 
> bmp3_values = []
> for pixel in pixels:
>     if pixel == (0, 0, 0, 0):
>         bmp3_values.append("00")
>     else:
>         bmp3_values.append("FF")
> 
> for chunk in chunked(bmp1_values, 16):
>     print(''.join(chunk))
> print("")
> 
> for chunk in chunked(bmp1_values, 16):
>     print(''.join(chunk))
> print("")
> 
> for chunk in chunked(bmp3_values, 16):
>     print(''.join(chunk))

> .Untitled { color: rgb(0, 0, 0) };
> .Untitled { color: rgb(0, 0, 85) };
> .Untitled { color: rgb(0, 0, 170) };
> .Untitled { color: rgb(0, 0, 255) };
> .Untitled { color: rgb(0, 36, 0) };
> .Untitled { color: rgb(0, 36, 85) };
> .Untitled { color: rgb(0, 36, 170) };
> .Untitled { color: rgb(0, 36, 255) };
> .Untitled { color: rgb(0, 72, 0) };
> .Untitled { color: rgb(0, 72, 85) };
> .Untitled { color: rgb(0, 72, 170) };
> .Untitled { color: rgb(0, 72, 255) };
> .Untitled { color: rgb(0, 108, 0) };
> .Untitled { color: rgb(0, 108, 85) };
> .Untitled { color: rgb(0, 108, 170) };
> .Untitled { color: rgb(0, 108, 255) };
> .Untitled { color: rgb(0, 144, 0) };
> .Untitled { color: rgb(0, 144, 85) };
> .Untitled { color: rgb(0, 144, 170) };
> .Untitled { color: rgb(0, 144, 255) };
> .Untitled { color: rgb(0, 180, 0) };
> .Untitled { color: rgb(0, 180, 85) };
> .Untitled { color: rgb(0, 180, 170) };
> .Untitled { color: rgb(0, 180, 255) };
> .Untitled { color: rgb(0, 216, 0) };
> .Untitled { color: rgb(0, 216, 85) };
> .Untitled { color: rgb(0, 216, 170) };
> .Untitled { color: rgb(0, 216, 255) };
> .Untitled { color: rgb(0, 252, 0) };
> .Untitled { color: rgb(0, 252, 85) };
> .Untitled { color: rgb(0, 252, 170) };
> .Untitled { color: rgb(0, 252, 255) };
> .Untitled { color: rgb(36, 0, 0) };
> .Untitled { color: rgb(36, 0, 85) };
> .Untitled { color: rgb(36, 0, 170) };
> .Untitled { color: rgb(36, 0, 255) };
> .Untitled { color: rgb(36, 36, 0) };
> .Untitled { color: rgb(36, 36, 85) };
> .Untitled { color: rgb(36, 36, 170) };
> .Untitled { color: rgb(36, 36, 255) };
> .Untitled { color: rgb(36, 72, 0) };
> .Untitled { color: rgb(36, 72, 85) };
> .Untitled { color: rgb(36, 72, 170) };
> .Untitled { color: rgb(36, 72, 255) };
> .Untitled { color: rgb(36, 108, 0) };
> .Untitled { color: rgb(36, 108, 85) };
> .Untitled { color: rgb(36, 108, 170) };
> .Untitled { color: rgb(36, 108, 255) };
> .Untitled { color: rgb(36, 144, 0) };
> .Untitled { color: rgb(36, 144, 85) };
> .Untitled { color: rgb(36, 144, 170) };
> .Untitled { color: rgb(36, 144, 255) };
> .Untitled { color: rgb(36, 180, 0) };
> .Untitled { color: rgb(36, 180, 85) };
> .Untitled { color: rgb(36, 180, 170) };
> .Untitled { color: rgb(36, 180, 255) };
> .Untitled { color: rgb(36, 216, 0) };
> .Untitled { color: rgb(36, 216, 85) };
> .Untitled { color: rgb(36, 216, 170) };
> .Untitled { color: rgb(36, 216, 255) };
> .Untitled { color: rgb(36, 252, 0) };
> .Untitled { color: rgb(36, 252, 85) };
> .Untitled { color: rgb(36, 252, 170) };
> .Untitled { color: rgb(36, 252, 255) };
> .Untitled { color: rgb(72, 0, 0) };
> .Untitled { color: rgb(72, 0, 85) };
> .Untitled { color: rgb(72, 0, 170) };
> .Untitled { color: rgb(72, 0, 255) };
> .Untitled { color: rgb(72, 36, 0) };
> .Untitled { color: rgb(72, 36, 85) };
> .Untitled { color: rgb(72, 36, 170) };
> .Untitled { color: rgb(72, 36, 255) };
> .Untitled { color: rgb(72, 72, 0) };
> .Untitled { color: rgb(72, 72, 85) };
> .Untitled { color: rgb(72, 72, 170) };
> .Untitled { color: rgb(72, 72, 255) };
> .Untitled { color: rgb(72, 108, 0) };
> .Untitled { color: rgb(72, 108, 85) };
> .Untitled { color: rgb(72, 108, 170) };
> .Untitled { color: rgb(72, 108, 255) };
> .Untitled { color: rgb(72, 144, 0) };
> .Untitled { color: rgb(72, 144, 85) };
> .Untitled { color: rgb(72, 144, 170) };
> .Untitled { color: rgb(72, 144, 255) };
> .Untitled { color: rgb(72, 180, 0) };
> .Untitled { color: rgb(72, 180, 85) };
> .Untitled { color: rgb(72, 180, 170) };
> .Untitled { color: rgb(72, 180, 255) };
> .Untitled { color: rgb(72, 216, 0) };
> .Untitled { color: rgb(72, 216, 85) };
> .Untitled { color: rgb(72, 216, 170) };
> .Untitled { color: rgb(72, 216, 255) };
> .Untitled { color: rgb(72, 252, 0) };
> .Untitled { color: rgb(72, 252, 85) };
> .Untitled { color: rgb(72, 252, 170) };
> .Untitled { color: rgb(72, 252, 255) };
> .Untitled { color: rgb(108, 0, 0) };
> .Untitled { color: rgb(108, 0, 85) };
> .Untitled { color: rgb(108, 0, 170) };
> .Untitled { color: rgb(108, 0, 255) };
> .Untitled { color: rgb(108, 36, 0) };
> .Untitled { color: rgb(108, 36, 85) };
> .Untitled { color: rgb(108, 36, 170) };
> .Untitled { color: rgb(108, 36, 255) };
> .Untitled { color: rgb(108, 72, 0) };
> .Untitled { color: rgb(108, 72, 85) };
> .Untitled { color: rgb(108, 72, 170) };
> .Untitled { color: rgb(108, 72, 255) };
> .Untitled { color: rgb(108, 108, 0) };
> .Untitled { color: rgb(108, 108, 85) };
> .Untitled { color: rgb(108, 108, 170) };
> .Untitled { color: rgb(108, 108, 255) };
> .Untitled { color: rgb(108, 144, 0) };
> .Untitled { color: rgb(108, 144, 85) };
> .Untitled { color: rgb(108, 144, 170) };
> .Untitled { color: rgb(108, 144, 255) };
> .Untitled { color: rgb(108, 180, 0) };
> .Untitled { color: rgb(108, 180, 85) };
> .Untitled { color: rgb(108, 180, 170) };
> .Untitled { color: rgb(108, 180, 255) };
> .Untitled { color: rgb(108, 216, 0) };
> .Untitled { color: rgb(108, 216, 85) };
> .Untitled { color: rgb(108, 216, 170) };
> .Untitled { color: rgb(108, 216, 255) };
> .Untitled { color: rgb(108, 252, 0) };
> .Untitled { color: rgb(108, 252, 85) };
> .Untitled { color: rgb(108, 252, 170) };
> .Untitled { color: rgb(108, 252, 255) };
> .Untitled { color: rgb(144, 0, 0) };
> .Untitled { color: rgb(144, 0, 85) };
> .Untitled { color: rgb(144, 0, 170) };
> .Untitled { color: rgb(144, 0, 255) };
> .Untitled { color: rgb(144, 36, 0) };
> .Untitled { color: rgb(144, 36, 85) };
> .Untitled { color: rgb(144, 36, 170) };
> .Untitled { color: rgb(144, 36, 255) };
> .Untitled { color: rgb(144, 72, 0) };
> .Untitled { color: rgb(144, 72, 85) };
> .Untitled { color: rgb(144, 72, 170) };
> .Untitled { color: rgb(144, 72, 255) };
> .Untitled { color: rgb(144, 108, 0) };
> .Untitled { color: rgb(144, 108, 85) };
> .Untitled { color: rgb(144, 108, 170) };
> .Untitled { color: rgb(144, 108, 255) };
> .Untitled { color: rgb(144, 144, 0) };
> .Untitled { color: rgb(144, 144, 85) };
> .Untitled { color: rgb(144, 144, 170) };
> .Untitled { color: rgb(144, 144, 255) };
> .Untitled { color: rgb(144, 180, 0) };
> .Untitled { color: rgb(144, 180, 85) };
> .Untitled { color: rgb(144, 180, 170) };
> .Untitled { color: rgb(144, 180, 255) };
> .Untitled { color: rgb(144, 216, 0) };
> .Untitled { color: rgb(144, 216, 85) };
> .Untitled { color: rgb(144, 216, 170) };
> .Untitled { color: rgb(144, 216, 255) };
> .Untitled { color: rgb(144, 252, 0) };
> .Untitled { color: rgb(144, 252, 85) };
> .Untitled { color: rgb(144, 252, 170) };
> .Untitled { color: rgb(144, 252, 255) };
> .Untitled { color: rgb(180, 0, 0) };
> .Untitled { color: rgb(180, 0, 85) };
> .Untitled { color: rgb(180, 0, 170) };
> .Untitled { color: rgb(180, 0, 255) };
> .Untitled { color: rgb(180, 36, 0) };
> .Untitled { color: rgb(180, 36, 85) };
> .Untitled { color: rgb(180, 36, 170) };
> .Untitled { color: rgb(180, 36, 255) };
> .Untitled { color: rgb(180, 72, 0) };
> .Untitled { color: rgb(180, 72, 85) };
> .Untitled { color: rgb(180, 72, 170) };
> .Untitled { color: rgb(180, 72, 255) };
> .Untitled { color: rgb(180, 108, 0) };
> .Untitled { color: rgb(180, 108, 85) };
> .Untitled { color: rgb(180, 108, 170) };
> .Untitled { color: rgb(180, 108, 255) };
> .Untitled { color: rgb(180, 144, 0) };
> .Untitled { color: rgb(180, 144, 85) };
> .Untitled { color: rgb(180, 144, 170) };
> .Untitled { color: rgb(180, 144, 255) };
> .Untitled { color: rgb(180, 180, 0) };
> .Untitled { color: rgb(180, 180, 85) };
> .Untitled { color: rgb(180, 180, 170) };
> .Untitled { color: rgb(180, 180, 255) };
> .Untitled { color: rgb(180, 216, 0) };
> .Untitled { color: rgb(180, 216, 85) };
> .Untitled { color: rgb(180, 216, 170) };
> .Untitled { color: rgb(180, 216, 255) };
> .Untitled { color: rgb(180, 252, 0) };
> .Untitled { color: rgb(180, 252, 85) };
> .Untitled { color: rgb(180, 252, 170) };
> .Untitled { color: rgb(180, 252, 255) };
> .Untitled { color: rgb(216, 0, 0) };
> .Untitled { color: rgb(216, 0, 85) };
> .Untitled { color: rgb(216, 0, 170) };
> .Untitled { color: rgb(216, 0, 255) };
> .Untitled { color: rgb(216, 36, 0) };
> .Untitled { color: rgb(216, 36, 85) };
> .Untitled { color: rgb(216, 36, 170) };
> .Untitled { color: rgb(216, 36, 255) };
> .Untitled { color: rgb(216, 72, 0) };
> .Untitled { color: rgb(216, 72, 85) };
> .Untitled { color: rgb(216, 72, 170) };
> .Untitled { color: rgb(216, 72, 255) };
> .Untitled { color: rgb(216, 108, 0) };
> .Untitled { color: rgb(216, 108, 85) };
> .Untitled { color: rgb(216, 108, 170) };
> .Untitled { color: rgb(216, 108, 255) };
> .Untitled { color: rgb(216, 144, 0) };
> .Untitled { color: rgb(216, 144, 85) };
> .Untitled { color: rgb(216, 144, 170) };
> .Untitled { color: rgb(216, 144, 255) };
> .Untitled { color: rgb(216, 180, 0) };
> .Untitled { color: rgb(216, 180, 85) };
> .Untitled { color: rgb(216, 180, 170) };
> .Untitled { color: rgb(216, 180, 255) };
> .Untitled { color: rgb(216, 216, 0) };
> .Untitled { color: rgb(216, 216, 85) };
> .Untitled { color: rgb(216, 216, 170) };
> .Untitled { color: rgb(216, 216, 255) };
> .Untitled { color: rgb(216, 252, 0) };
> .Untitled { color: rgb(216, 252, 85) };
> .Untitled { color: rgb(216, 252, 170) };
> .Untitled { color: rgb(216, 252, 255) };
> .Untitled { color: rgb(252, 0, 0) };
> .Untitled { color: rgb(252, 0, 85) };
> .Untitled { color: rgb(252, 0, 170) };
> .Untitled { color: rgb(252, 0, 255) };
> .Untitled { color: rgb(252, 36, 0) };
> .Untitled { color: rgb(252, 36, 85) };
> .Untitled { color: rgb(252, 36, 170) };
> .Untitled { color: rgb(252, 36, 255) };
> .Untitled { color: rgb(252, 72, 0) };
> .Untitled { color: rgb(252, 72, 85) };
> .Untitled { color: rgb(252, 72, 170) };
> .Untitled { color: rgb(252, 72, 255) };
> .Untitled { color: rgb(252, 108, 0) };
> .Untitled { color: rgb(252, 108, 85) };
> .Untitled { color: rgb(252, 108, 170) };
> .Untitled { color: rgb(252, 108, 255) };
> .Untitled { color: rgb(252, 144, 0) };
> .Untitled { color: rgb(252, 144, 85) };
> .Untitled { color: rgb(252, 144, 170) };
> .Untitled { color: rgb(252, 144, 255) };
> .Untitled { color: rgb(252, 180, 0) };
> .Untitled { color: rgb(252, 180, 85) };
> .Untitled { color: rgb(252, 180, 170) };
> .Untitled { color: rgb(252, 180, 255) };
> .Untitled { color: rgb(252, 216, 0) };
> .Untitled { color: rgb(252, 216, 85) };
> .Untitled { color: rgb(252, 216, 170) };
> .Untitled { color: rgb(252, 216, 255) };
> .Untitled { color: rgb(252, 252, 0) };
> .Untitled { color: rgb(252, 252, 85) };
> .Untitled { color: rgb(252, 252, 170) };
> .Untitled { color: rgb(252, 252, 255) };








Reply to: