如何将16位深度的图像转换为8位深度

时间:2015-08-28 03:10:37

标签: image data-conversion

具体而言,我使用具有16位像素值的灰度图像矩阵。我试图将其编码为PNG图像,但编码器只接受8位深度的像素值。

1 个答案:

答案 0 :(得分:1)

灰度图像的强度值范围为0到65,535(2 ^ 16 - 1),假设您正在处理无符号数字。要将其转换为8位值,范围将为0-255(2 ^ 8 - 1)。因此,您希望保留每个数字的最重要的8位(最左边的8位)。您可以将每个数字除以2 ^ 8并对结果进行舍入,或者将数字向右移位8位。每个右移位n个空格相当于将十进制数除以2 ^ n并将结果放在一起。

int rows;  
int cols;
unsigned int* image;

unsigned char*downConvertImage(unsigned int* img, int rows, int cols) {

    unsigned char* out = new unsigned char[rows*cols];

    for (int i = 0; i < rows*cols - 1; i++)
        out[i] = (unsigned char*) image[i]/256;

    return out;
}