Bladeren bron

* Added bitmap invert routine. It doesn't work well, so don't use it right now. Sam is working hard to correct the strange behaviour.

tags/v0.99.beta14
Jean-Yves Lamoureux jylam 19 jaren geleden
bovenliggende
commit
f53bc3937a
3 gewijzigde bestanden met toevoegingen van 28 en 1 verwijderingen
  1. +25
    -0
      cucul/bitmap.c
  2. +1
    -0
      cucul/cucul.h
  3. +2
    -1
      test/demo.c

+ 25
- 0
cucul/bitmap.c Bestand weergeven

@@ -149,6 +149,7 @@ struct cucul_bitmap
int red[256], green[256], blue[256], alpha[256];
float gamma;
int gammatab[4097];
unsigned char invert;
};
#endif

@@ -313,6 +314,9 @@ struct cucul_bitmap *cucul_create_bitmap(unsigned int bpp, unsigned int w,
for(i = 0; i < 4096; i++)
bitmap->gammatab[i] = i;

/* No color inversion by default */
bitmap->invert = 0;

return bitmap;
}

@@ -379,6 +383,22 @@ void cucul_set_bitmap_gamma(struct cucul_bitmap *bitmap, float gamma)
bitmap->gammatab[i] = 4096.0 * gammapow((float)i / 4096.0, 1.0 / gamma);
}


/**
* \brief Invert colors of bitmap
*
* Invert colors of bitmap
*
* \param bitmap Bitmap object.
* \param value 0 for normal behaviour, 1 for invert
*/
void cucul_set_bitmap_invert(struct cucul_bitmap *bitmap, unsigned char value)
{
bitmap->invert = (value==0)?0:1;
}



/**
* \brief Free the memory associated with a bitmap.
*
@@ -781,6 +801,11 @@ void cucul_draw_bitmap(cucul_t *qq, int x1, int y1, int x2, int y2,
fs_b[x+1] = 1 * error[2] / 16;
}

if(bitmap->invert) {
outfg = 15-outfg;
outbg = 15-outfg;
}

/* Now output the character */
cucul_set_color(qq, outfg, outbg);
cucul_putstr(qq, x, y, outch);


+ 1
- 0
cucul/cucul.h Bestand weergeven

@@ -223,6 +223,7 @@ void cucul_set_bitmap_palette(struct cucul_bitmap *,
unsigned int b[], unsigned int a[]);
void cucul_set_bitmap_gamma(struct cucul_bitmap *, float);
void cucul_draw_bitmap(cucul_t *, int, int, int, int, struct cucul_bitmap const *, void *);
void cucul_set_bitmap_invert(struct cucul_bitmap *, unsigned char);
void cucul_free_bitmap(struct cucul_bitmap *);
/* @} */



+ 2
- 1
test/demo.c Bestand weergeven

@@ -493,7 +493,7 @@ static void demo_render(void)
//*dest++ = ((x >> 3) << 11) | ((y >> 2) << 5) | ((z >> 3));
*dest++ = (x << 16) | (y << 8) | (z);
}
cucul_set_bitmap_invert(bitmap, 1);
//bitmap = cucul_create_bitmap(16, 256, 256, 2 * 256, 0xf800, 0x07e0, 0x001f, 0x0000);
bitmap = cucul_create_bitmap(32, 256, 256, 4 * 256, 0x00ff0000, 0x0000ff00, 0x000000ff, 0xff000000);
cucul_draw_bitmap(qq, 0, 0, cucul_get_width(qq) - 1, cucul_get_height(qq) - 1,
@@ -540,6 +540,7 @@ static void demo_render(void)
draw_circle(buffer, xo, yo, z, 0x000000ff, 200);

bitmap = cucul_create_bitmap(32, 256, 256, 4 * 256, 0x00ff0000, 0x0000ff00, 0x000000ff, 0xff000000);
cucul_set_bitmap_invert(bitmap, 1);
cucul_draw_bitmap(qq, 0, 0, cucul_get_width(qq) - 1, cucul_get_height(qq) - 1, bitmap, (char *)buffer);
cucul_free_bitmap(bitmap);
}


Laden…
Annuleren
Opslaan