Как конвертировать 12-битное изображение в 8-битное в C / C ++?

Хорошо, я очень расстроился, пытаясь преобразовать 12-битный буфер в 8-битный. Источником изображения является 12-битный GrayScale (распакованный из JPEG2000), цветовой диапазон которого составляет от 0 до 4095. Теперь я должен уменьшить это до 0-255. Здравый смысл подсказывает мне, что я должен просто разделить значение каждого пикселя следующим образом. Но когда я пытаюсь это сделать, изображение получается слишком светлым.

void 
TwelveToEightBit(
    unsigned char * charArray,
    unsigned char * shortArray,
    const int num )
{

    short shortValue  = 0; //Will contain the two bytes in the shortArray.
    double doubleValue  = 0; //Will contain intermediary calculations.

    for( int i = 0, j =0; i < num; i++, j +=2 )
    {
        // Bitwise manipulations to fit two chars onto one short.
        shortValue = (shortArray[j]<<8);
        shortValue += (shortArray[j+1]);

        charArray[i] = (( unsigned char)(shortValue/16));
    }
}

Теперь я могу сказать, что должны быть некоторые настройки контрастности. Любые идеи кто-нибудь?

Спасибо заранее

Ответы на вопрос(5)

Ваш ответ на вопрос