具体而言,我使用具有16位像素值的灰度图像矩阵。我试图将其编码为PNG图像,但编码器只接受8位深度的像素值。
答案 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;
}