256-color cube is not ansi, don't muddy the waters

pull/151/head
nick black 5 years ago committed by Nick Black
parent 65858b4495
commit 58cc6927ac

@ -168,13 +168,13 @@ flash_damage_map(unsigned char* damage, int count, bool val){
void ncplane_updamage(ncplane* n);
// For our first attempt, O(1) uniform conversion from 8-bit r/g/b down to
// ~2.4-bit 6x6x6 ANSI cube + greyscale (assumed on entry; I know no way to
// ~2.4-bit 6x6x6 cube + greyscale (assumed on entry; I know no way to
// even semi-portably recover the palette) proceeds via: map each 8-bit to
// a 5-bit target grey. if all 3 components match, select that grey.
// otherwise, c / 42.7 to map to 6 values. this never generates pure black
// nor white, though, lame...FIXME
static inline int
rgb_to_ansi256(unsigned r, unsigned g, unsigned b){
rgb_quantize_256(unsigned r, unsigned g, unsigned b){
const unsigned GREYMASK = 0xf8;
// if all 5 MSBs match, return grey from 24-member grey ramp or pure
// black/white from original 16 (0 and 15, respectively)

@ -947,7 +947,7 @@ term_bg_rgb8(notcurses* nc, FILE* out, unsigned r, unsigned g, unsigned b){
// a single screen, start... combining close ones? For 8-color mode, simple
// interpolation. I have no idea what to do for 88 colors. FIXME
if(nc->colors >= 256){
term_emit("setab", tiparm(nc->setab, rgb_to_ansi256(r, g, b)), out, false);
term_emit("setab", tiparm(nc->setab, rgb_quantize_256(r, g, b)), out, false);
}
return -1;
}
@ -968,7 +968,7 @@ term_fg_rgb8(notcurses* nc, FILE* out, unsigned r, unsigned g, unsigned b){
return -1;
}
if(nc->colors >= 256){
term_emit("setaf", tiparm(nc->setaf, rgb_to_ansi256(r, g, b)), out, false);
term_emit("setaf", tiparm(nc->setaf, rgb_quantize_256(r, g, b)), out, false);
}
// For 256-color indexed mode, start constructing a palette based off
// the inputs *if we can change the palette*. If more than 256 are used on

@ -14,7 +14,7 @@ TEST_F(InternalsTest, RGBtoANSIWhite) {
unsigned r, g, b;
for(r = 250 ; r < 256 ; ++r){
g = b = r;
EXPECT_EQ(15, rgb_to_ansi256(r, g, b));
EXPECT_EQ(15, rgb_quantize_256(r, g, b));
}
}
@ -22,7 +22,7 @@ TEST_F(InternalsTest, RGBtoANSIBlack) {
unsigned r, g, b;
for(r = 0 ; r < 10 ; ++r){
g = b = r;
EXPECT_EQ(0, rgb_to_ansi256(r, g, b));
EXPECT_EQ(0, rgb_quantize_256(r, g, b));
}
}
@ -30,7 +30,7 @@ TEST_F(InternalsTest, RGBtoANSIGrey) {
unsigned r, g, b;
for(r = 10 ; r < 244 ; ++r){
g = b = r;
EXPECT_EQ(231 + (r * 5) / 49, rgb_to_ansi256(r, g, b));
EXPECT_EQ(231 + (r * 5) / 49, rgb_quantize_256(r, g, b));
}
}
@ -39,7 +39,7 @@ TEST_F(InternalsTest, RGBtoANSIRed) {
unsigned r, g, b;
g = b = 0x0;
for(r = 0 ; r < 256 ; ++r){
int c256 = rgb_to_ansi256(r, g, b);
int c256 = rgb_quantize_256(r, g, b);
if(r < 8){
EXPECT_EQ(0, c256);
}else{
@ -54,7 +54,7 @@ TEST_F(InternalsTest, RGBtoANSIGreen) {
unsigned r, g, b;
r = b = 0x0;
for(g = 0 ; g < 256 ; ++g){
int c256 = rgb_to_ansi256(r, g, b);
int c256 = rgb_quantize_256(r, g, b);
EXPECT_GT(48, c256);
if(g < 8){
EXPECT_EQ(0, c256);
@ -70,7 +70,7 @@ TEST_F(InternalsTest, RGBtoANSIBlue) {
unsigned r, g, b;
r = g = 0x0;
for(b = 0 ; b < 256 ; ++b){
int c256 = rgb_to_ansi256(r, g, b);
int c256 = rgb_quantize_256(r, g, b);
EXPECT_GT(22, c256);
if(b < 8){
EXPECT_EQ(0, c256);

Loading…
Cancel
Save