How to convert 24 bit RGB to 8 bit RGB
Asked Answered
I

3

6

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.

Inapposite answered 5/10, 2011 at 6:55 Comment(1)
Please add details about programming language and/or color representation.Agustin
D
7

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.

Deeplaid answered 5/10, 2011 at 6:59 Comment(2)
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
M
3

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

Moppet answered 12/8, 2014 at 7:18 Comment(0)
M
0

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)
Myriapod answered 17/6, 2016 at 5:56 Comment(0)

© 2022 - 2024 — McMap. All rights reserved.