⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 rgbvary.c

📁 图形处理算法合集3:包括图形处理、帧缓存技术、渲染、矩阵运算、建模方法
💻 C
字号:
/****************************************************************************    rgbvary.c - a color quantization pre-processor    The function jitter_init() must be call one time before any calls    to rgbvary().Entry:    rgb            - an array of RGB components    noise_level    - the amount of noise desired (0 - 8)    x              - the x coordinate of the pixel being processed    y              - the y coordinate of the pixel being processedExit:    rgb            - the resulting array of RGB components****************************************************************************//* defined constants */#define LARGE_NUMBER        1024#define JITTER_TABLE_SIZE     1024#define JITTER_MASK         (JITTER_TABLE_SIZE-1)/* global variables */int       irand[JITTER_TABLE_SIZE];    /* jitter look-up table */double    uranx[JITTER_TABLE_SIZE];    /* jitter look-up table */double    urany[JITTER_TABLE_SIZE];    /* jitter look-up table *//* jitter macros */#define jitterx(x,y,s) (uranx[((x+(y<<2))+irand[(x+s)&JITTER_MASK])&JITTER_MASK])#define jittery(x,y,s) (urany[((y+(x<<2))+irand[(y+s)&JITTER_MASK])&JITTER_MASK])/* function declarations */void jitter_init();int rand();void rgbvary(unsigned char rgb[3], int noise_level, int x , int y)    {    int i, p, q;    if (noise_level == 0)        {        for (i = 0; i <= 2; ++i)            rgb[i] &= 0xf8;        return;        }    for (i = 0; i <= 2; ++i)        {        if (rgb[i] < 248)            {            p = rgb[i] % 8;            q = (int)(jitterx(x, y, i) * 9.0);            if (p <= q)                rgb[i] += 8;            /* add some noise */            q = 8 * ((int)((jittery(x, y, i)                * (double)(2 * noise_level)) + 0.5)                - noise_level);            q += (int)rgb[i];            /* make sure resulting intensity is within allowable range */            if (q >= 0 && q <= 255)                rgb[i] = q;            /* mask off lower 3 bits */            rgb[i] &= 0xf8;            }        }    }/*** name        jitter_init - initialize jitter look-up tables**             Adapted from Graphic Gems I (Cyshosz, page 64).** notes       This function should be called once before any call to*             rgbvary()**/void jitter_init()    {    int i;    /* initialize look-up tables */    for (i = 0; i < JITTER_TABLE_SIZE; ++i)        uranx[i] = (double)(rand() % LARGE_NUMBER) / (double)LARGE_NUMBER;    for (i = 0; i < JITTER_TABLE_SIZE; ++i)        urany[i] = (double)(rand() % LARGE_NUMBER) / (double)LARGE_NUMBER;    for (i = 0; i < JITTER_TABLE_SIZE; ++i)        irand[i] = (int)((double)JITTER_TABLE_SIZE            * ((double)(rand() % LARGE_NUMBER) / (double)LARGE_NUMBER));    }

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -