Wie konvertiere ich ein 12-Bit-Image in 8-Bit in C / C ++?

Also gut, ich war sehr frustriert, als ich versucht habe, einen 12-Bit-Puffer in einen 8-Bit-Puffer umzuwandeln. Die Bildquelle ist eine 12-Bit-GrayScale (aus JPEG2000 dekomprimiert), deren Farbbereich von 0 bis 4095 reicht. Jetzt muss ich das auf 0-255 reduzieren. Der gesunde Menschenverstand sagt mir, dass ich einfach jeden Pixelwert so teilen soll. Aber wenn ich das versuche, wird das Bild zu hell.

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));
    }
}

Jetzt kann ich sagen, dass es einige Kontrastanpassungen geben muss. Irgendwelche Ideen?

Vielen Dank im Vorau

Antworten auf die Frage(10)

Ihre Antwort auf die Frage