I was wondering what is the best way to convert a 24-bit RGB color (8 bits per color) into an 8-bit color (2bits Blue, 3 Green, 3 Red). I'd like C code for doing this.
How to convert 24 bit RGB to 8 bit RGB
Please add details about programming language and/or color representation. –
Agustin
8 bit RGB is normally an indexed (palettized) color format, see Palette (computing).
The way you described it though, getting 8 bpp out of 24 bpp is pretty straightforward - you would need to strip least significant bits and merge the bits into single byte value, per pixel. AFAIK it is not a standard or well-known pixel color representation.
Are you sure you should discard less significant bytes instead of approximating? –
Agustin
There are options out there, such as dithering too. The simplest for understanding and implementation is to discard bits and reduce detail in order to fit into fixed number of bits. Alterations on top of that are to add more noise yet to leave better subjective quality. Anyway, I'd bet that if OP would go one step back to clarify the question, an indexed color format would come up. –
Deeplaid
Not in C but in javascript.
encodedData = (Math.floor((red / 32)) << 5) + (Math.floor((green / 32)) << 2) + Math.floor((blue / 64));
https://mcmap.net/q/1434416/-converting-8-bit-color-into-rgb-value
To convert 8bit [0 - 255] value into 3bit [0, 7], the 0 is not a problem, but remember 255 should be converted to 7, so the formula should be Red3 = Red8 * 7 / 255.
To convert 24bit color into 8bit (RRRGGGBB),
8bit Color = (Red * 7 / 255) << 5 + (Green * 7 / 255) << 2 + (Blue * 3 / 255)
© 2022 - 2024 — McMap. All rights reserved.