Попробуйте что-то вроде этого:
byte luminance_upper = 23;
byte luminance_lower = 57;
int luminance = ((int)luminance_upper << 8) | (int)luminance_lower;
Это даст вам значение между 0-65535 ,
Конечно, если вы просто хотите получить 32-битный цвет ARGB (оттенок серого), нижний байт не будет иметь значения, потому что вы переходите от 16-разрядной яркости к 8-битовому R , G, B.
byte luminance_upper = 255;
// assuming ARGB format
uint argb = (255u << 24) // alpha = 255
| ((uint)luminance_upper << 16) // red
| ((uint)luminance_upper << 8) // green
| (uint)luminance_upper; // blue (hope my endianess is correct)
В зависимости от вашей ситуации может возникнуть лучший способ обойти это. Например, приведенный выше код выполняет линейное сопоставление, однако вы можете получить более качественные результаты, используя логарифмическую кривую для сопоставления 16-битных значений с 8-разрядными компонентами RGB.
Это именно то, что мне нужно спасибо! – RCIX