# matrix rgb 12 bits color-help

my problem is I do not quite understand how a 12-bit array,

when creating an image of 24bits, I just need enough to know that 1 byte per color. ie 8 bits for R, 8 bits for G,, 8 bits for B, then to the level of each LED, ranges from 0-255, so it would stay like this:

uint8_t R [NLeD] = {0,12,255}; uint8_t G [NLeD] = {} 2,123,33; uint8_t B [NLeD] = {2,55,128};

Now with a matrix of 12 bits, 4 bits per color is required, 16 level per channel RGB color, I think this is so:

0, 17,34,51,68,85,102,119,136,153,170,187,204,221,238,255

uint8_t R [NLeD] = {0, 17,34,51,68,85,102,119,136,153,170,187,204,221,238,255}; uint8_t G [NLeD] = {0, 17,34,51,68,85,102,119,136,153,170,187,204,221,238,255}; uint8_t B [NLeD] = {0, 17,34,51,68,85,102,119,136,153,170,187,204,221,238,255};

but where is the bit saving? whether to use 16bit, I use one byte per channel, ie 24bit.

I'm doing wrong?, I code these 16 colors, and envevelos on a single number that represent me the three color channels?

With 16 bits, many people use 5 for red, 6 for green, 5 for blue.

If you need to use 12 bits you have to combine two pixels into 24 bits (3 bytes has two pixels in format: RRRRGGGG BBBBRRRR GGGGBBBB). THis saves memory but is slower to process.

hola fungus, veo que hablas español ,me podria explicar como podria hacer lo que comentas, para 12bits

Naruto128:
hola fungus, veo que hablas español ,me podria explicar como podria hacer lo que comentas, para 12bits

Una pista:

struct twoLEDs {
byte r1:4;
byte g1:4;
byte b1:4;
byte r2:4;
byte g2:4;
byte b2:4;
};

twoLEDs ab;

void setup()
{
ab.r1 = 12;
ab.g1 = 6;
ab.b2 = 11;

// LED shows if 'ab' occupies three bytes
pinMode(13,OUTPUT);
digitalWrite(13,sizeof(ab)==3);
}

void loop()
{
}

no se si di un paso , o retrocedi 5.

lo que entiendo , es que al numero lo partes por 4, y lo distribuyes en 3bytes, osea 12bits,PARA UN solo led.este varia de 0-15, por lo cual supongo que se debe hacer una asosiacion entre estos y el level del color, por ejemplo:

level led 0, 17,34,51,68,85,102,119,136,153,170,187,204,221,238,255 0 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15

es deecir , si sale 6, al led rojo le toca el level 119.

Lo que no entiendo como dividir al numero y luego reconstruirlo. osea, supongamos que resivo desde puerto serial 3bytes, estos ya estan formados, o los numeros rgb, estan dispersos por los 3bytes( RRRRGGGG BBBBRRRR GGGGBBBB), ahora como los reconstruyo ??

ejemplo:

R=12 G=3 B=6

R2=4 G2=0 B2=7

ESTOS SE LOS METE en tres bytes, que son cacturados por arduino y recontruidos

como ??, ni idea