Color Converter
Ostatnio zmodyfikowano 2017-03-25 12:05
milmega Temat założony przez niniejszego użytkownika |
Color Converter » 2017-03-15 17:40:36 Próbuję dokonać konwersji kolorów z wartości ośmiobitowych, przekazanych do funkcji przez paramtery unsigned char r, unsigned char g, unsigned char b na wartości 5-bitowe dla kolorów Red i Blue oraz wartość 6-bitową dla koloru Green oraz ustawić wynikowe bity w odpowiednich dla nich miejscach w 16-bitowym słowie. #define RGB16 unsigned short
RGB16 colorConvert( unsigned char r, unsigned char g, unsigned char b ) { return(( r & 0xff ) << 16 ) +(( g & 0xff ) << 8 ) +( b & 0xff ); }
|
|
pekfos |
» 2017-03-15 17:56:24 Zacznij od tego, żeby się zmieścić na 16 bitach, a nie 24. Część na pewno musisz wyciąć. |
|
milmega Temat założony przez niniejszego użytkownika |
» 2017-03-19 13:49:57 Taki mam zamiar, ale nie do końca wiem jak się do tego zabrać :( |
|
pekfos |
» 2017-03-19 14:13:34 Zapewne chcesz wyciąć najmniej znaczące bity, więc przesuń argumenty w prawo. |
|
milmega Temat założony przez niniejszego użytkownika |
» 2017-03-19 16:59:18 cos nadal niestety nie pasuje return(( r & 0xff ) >> 3 ) +(( g & 0xff ) >> 3 ) +(( b & 0xff ) >> 2 );
|
|
pekfos |
» 2017-03-19 17:11:10 & 0xFF jest niepotrzebne, argumenty to unsigned char, wiec jak to by miało coś zmienić? Przesuniętych wartości nie możesz ze sobą po prostu dodawać, bo wyjdą bzdury. |
|
milmega Temat założony przez niniejszego użytkownika |
» 2017-03-24 19:53:25 return( r >> 3 ) &( g >> 2 ) &( b >> 3 );
|
|
mokrowski |
» 2017-03-24 23:02:07 #include <cstdint>
using RGB16_t = uint16_t;
RGB16_t colorConvert( uint8_t r, uint8_t g, uint8_t b ) { return(( r & ~( 0x07 ) ) << 8 ) |(( g & ~( 0x03 ) ) << 3 ) |( b >> 3 ); }
|
|
« 1 » 2 |