Я пытаюсь декодировать PNG в C # с 16 битами на канал (бит / канал) для изображения в градациях серого.Я полагаю, что я декодирую правильные необработанные значения, однако, когда я преобразовываю в 8bpc для возвращаемых значений, я не вычисляю те же значения, что и System.Drawing
, Gimp или SixLabors.ImageSharp
.
Учитывая следующие значения байтов:один пиксель в градациях серого:
byte b0 = data[index];
byte b1 = data[index + 1];
Я пробовал следующие сопоставления:
byte result = b0;
byte result = (byte)(255 * (((b0 << 8) + b1)/ushort.MaxValue));
byte result = (byte)(((b0 << 8) + b1)/256.0);
Но ни один из этих подходов не соответствует значениям из другого программного обеспечения, предсказанным для следующих значений:
b0 b1 expected
55 186 55
67 135 67
35 241 36
Я уверен, что неправильно понимаю правильный метод нормализации до значения 8 бит / с.
Это изображение выглядит так: