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