Panel użytkownika
Nazwa użytkownika:
Hasło:
Nie masz jeszcze konta?

Color Converter

Ostatnio zmodyfikowano 2017-03-25 12:05
Autor Wiadomość
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.

C/C++
#define RGB16 unsigned short

RGB16 colorConvert( unsigned char r, unsigned char g, unsigned char b )
{
   
    return(( r & 0xff ) << 16 ) +(( g & 0xff ) << 8 ) +( b & 0xff );
}
P-159023
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ąć.
P-159024
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ć :(
P-159152
pekfos
» 2017-03-19 14:13:34
Zapewne chcesz wyciąć najmniej znaczące bity, więc przesuń argumenty w prawo.
P-159153
milmega
Temat założony przez niniejszego użytkownika
» 2017-03-19 16:59:18
cos nadal niestety nie pasuje
C/C++
return(( r & 0xff ) >> 3 ) +(( g & 0xff ) >> 3 ) +(( b & 0xff ) >> 2 );
P-159159
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.
P-159160
milmega
Temat założony przez niniejszego użytkownika
» 2017-03-24 19:53:25

C/C++
return( r >> 3 ) &( g >> 2 ) &( b >> 3 );
P-159344
mokrowski
» 2017-03-24 23:02:07
C/C++
#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 );
}
P-159354
« 1 » 2
  Strona 1 z 2 Następna strona