Changeset 464


Ignore:
Timestamp:
01/14/05 00:59:55 (8 years ago)
Author:
sam
Message:
  • src/bitmap.c: + Implemented caca_set_bitmap_gamma().
Location:
libcaca/trunk/src
Files:
2 edited

Legend:

Unmodified
Added
Removed
  • libcaca/trunk/src/bitmap.c

    r378 r464  
    4646#include <limits.h> 
    4747#include <string.h> 
     48#include <math.h> 
    4849 
    4950#include "caca.h" 
     
    171172    void (*get_hsv)(struct caca_bitmap *, char *, int, int); 
    172173    int red[256], green[256], blue[256], alpha[256]; 
     174    float gammaval; 
     175    int gammatab[4097]; 
    173176}; 
    174177#endif 
     
    224227{ 
    225228    struct caca_bitmap *bitmap; 
     229    int i; 
    226230 
    227231    /* Minor sanity test */ 
     
    258262    if(bpp == 8) 
    259263    { 
    260         int i; 
    261264        bitmap->has_palette = 1; 
    262265        bitmap->has_alpha = 0; 
     
    268271        } 
    269272    } 
     273 
     274    /* Default gamma value */ 
     275    for(i = 0; i < 4096; i++) 
     276        bitmap->gammatab[i] = i; 
    270277 
    271278    return bitmap; 
     
    312319 
    313320    bitmap->has_alpha = has_alpha; 
     321} 
     322 
     323/** 
     324 * \brief Set the gamma of a bitmap object. 
     325 * 
     326 * Set the gamma of bitmap. 
     327 * 
     328 * \param bitmap Bitmap object. 
     329 * \param red Gamma value. 
     330 */ 
     331void caca_set_bitmap_gamma(struct caca_bitmap *bitmap, float gammaval) 
     332{ 
     333    int i; 
     334 
     335    if(gammaval <= 0.0) 
     336        return; 
     337 
     338    bitmap->gammaval = gammaval; 
     339 
     340    for(i = 0; i < 4096; i++) 
     341        bitmap->gammatab[i] = 4096.0 * powf((float)i / 4096.0, 1.0 / gammaval); 
    314342} 
    315343 
     
    371399    if(bitmap->has_palette) 
    372400    { 
    373         *r += bitmap->red[bits]; 
    374         *g += bitmap->green[bits]; 
    375         *b += bitmap->blue[bits]; 
     401        *r += bitmap->gammatab[bitmap->red[bits]]; 
     402        *g += bitmap->gammatab[bitmap->green[bits]]; 
     403        *b += bitmap->gammatab[bitmap->blue[bits]]; 
    376404        *a += bitmap->alpha[bits]; 
    377405    } 
    378406    else 
    379407    { 
    380         *r += ((bits & bitmap->rmask) >> bitmap->rright) << bitmap->rleft; 
    381         *g += ((bits & bitmap->gmask) >> bitmap->gright) << bitmap->gleft; 
    382         *b += ((bits & bitmap->bmask) >> bitmap->bright) << bitmap->bleft; 
     408        *r += bitmap->gammatab[((bits & bitmap->rmask) >> bitmap->rright) << bitmap->rleft]; 
     409        *g += bitmap->gammatab[((bits & bitmap->gmask) >> bitmap->gright) << bitmap->gleft]; 
     410        *b += bitmap->gammatab[((bits & bitmap->bmask) >> bitmap->bright) << bitmap->bleft]; 
    383411        *a += ((bits & bitmap->amask) >> bitmap->aright) << bitmap->aleft; 
    384412    } 
  • libcaca/trunk/src/caca.h

    r463 r464  
    348348                             unsigned int r[], unsigned int g[], 
    349349                             unsigned int b[], unsigned int a[]); 
     350void caca_set_bitmap_gamma(struct caca_bitmap *, float); 
    350351void caca_draw_bitmap(int, int, int, int, struct caca_bitmap const *, void *); 
    351352void caca_free_bitmap(struct caca_bitmap *); 
Note: See TracChangeset for help on using the changeset viewer.