Просмотр исходного кода

* 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 лет назад
Родитель
Сommit
f53bc3937a
3 измененных файлов: 28 добавлений и 1 удалений
  1. +25
    -0
      cucul/bitmap.c
  2. +1
    -0
      cucul/cucul.h
  3. +2
    -1
      test/demo.c

+ 25
- 0
cucul/bitmap.c Просмотреть файл

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


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


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

return bitmap; 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); 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. * \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; fs_b[x+1] = 1 * error[2] / 16;
} }


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

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


+ 1
- 0
cucul/cucul.h Просмотреть файл

@@ -223,6 +223,7 @@ void cucul_set_bitmap_palette(struct cucul_bitmap *,
unsigned int b[], unsigned int a[]); unsigned int b[], unsigned int a[]);
void cucul_set_bitmap_gamma(struct cucul_bitmap *, float); 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_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 *); void cucul_free_bitmap(struct cucul_bitmap *);
/* @} */ /* @} */




+ 2
- 1
test/demo.c Просмотреть файл

@@ -493,7 +493,7 @@ static void demo_render(void)
//*dest++ = ((x >> 3) << 11) | ((y >> 2) << 5) | ((z >> 3)); //*dest++ = ((x >> 3) << 11) | ((y >> 2) << 5) | ((z >> 3));
*dest++ = (x << 16) | (y << 8) | (z); *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(16, 256, 256, 2 * 256, 0xf800, 0x07e0, 0x001f, 0x0000);
bitmap = cucul_create_bitmap(32, 256, 256, 4 * 256, 0x00ff0000, 0x0000ff00, 0x000000ff, 0xff000000); 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, 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); draw_circle(buffer, xo, yo, z, 0x000000ff, 200);


bitmap = cucul_create_bitmap(32, 256, 256, 4 * 256, 0x00ff0000, 0x0000ff00, 0x000000ff, 0xff000000); 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_draw_bitmap(qq, 0, 0, cucul_get_width(qq) - 1, cucul_get_height(qq) - 1, bitmap, (char *)buffer);
cucul_free_bitmap(bitmap); cucul_free_bitmap(bitmap);
} }


Загрузка…
Отмена
Сохранить