将12位图像数据转化为8位输出

int 12bit_con_8bit(unsigned char *bic,unsigned short *bo,unsigned int img_len, int bit_len,int flag)
{
        unsigned int i;
        int data;
        int eff = 8;
        unsigned int n = 0;
        int mask = 0;


        for (i = 0; i < bit_len; i++)
                mask |= 1 << i;
#if 1
        for (i = 0; i < img_len; i++)
        {
                data = bic[n] >> (8 - eff);
                while (bit_len > eff)
                {
                        n++;
                        data += ((int)(bic[n])) << eff;
                        eff += 8;
                }
                if (flag == 2)
                        bo[i] = (data & mask) * 28;
                else
                {
                        bo[i] = (data & mask) << (16 - bit_len);
                }

                if (bo[i] & 0x8000)
                        bo[i] = 0xfff0;
                else
                        bo[i] = bo[i] << 1;

                eff -= bit_len;
                if (eff == 0)
                {
                        n++;
                        eff = 8;
                }
        }
#endif
        return 1;
}



uint8_t *imagein= (uint8_t *)malloc(w*h+3);//数据本身是12位  图像的宽度*高度
unsigned short *imageout1 = (unsigned short *)malloc(w*h * sizeof(unsigned short)+10 * 4);

12bit_con_8bit(imagein, imageout1, w*h, 8, 0);

你可能感兴趣的:(算法)