Да, вы можете хранить пиксели в буфере Uint16Array
, а затем читать и записывать значения яркости в это. Обратите внимание, что размер байта (network/big-endian vs. little-endian) будет иметь значение - DataView
может помочь вам в этом или просто поменять байтовый порядок, если входящий буфер является big-endian.
Обратите внимание, что значения за пределами диапазона получают модульную обработку, поэтому вам нужно закрепить их вручную (или написать с использованием маски 0xffff). Затем получите доступ к каждому значению яркости в виде обычного массива с использованием индексов.
Однако, если вы намерены выполнять большую обработку, я бы рекомендовал вместо этого использовать буфер с плавающей запятой с нормализованными значениями, используя либо Float32Array
, либо Float64Array
- первый быстрее, последний более точный. Это также позволит вам вводить и удалять динамический диапазон, как вам нужно, если только вам не нужно зажимать значения для каждого прохода.
Для нормализации (очевидно, но для записи):
newLum = oldLum/0xffff;
Подсказки: чтобы получить более точный предварительный просмотр, если вам нужно, что по пути, чтобы использовать следующий подход к уменьшению масштаба - в принципе для любой глубины:
var inDepth = Math.pow(2, 16) - 1; // 65535
var outDepth = Math.pow(2, 8) - 1; // 255
то для каждого значения яркости:
var r,g,b,a;
r = g = b = (lum * outDepth/inDepth + 0.5)|0; // or, in this case -
r = g = b = (lum * 0.0038910505836575876 + 0.5)|0;
a = 255;
Если СОУ rce использует гамму, необходимо будет преобразовать гамма в линейную перед обработкой, когда это будет сделано, повторно использовать гамму.
Вы всегда можете сделать маску/смену op. но это будет не так точно.
(Canvas всегда будет использовать 8-разрядный буфер RGBA).
Вы хотите иметь возможность отображать 16-битные изображения в оттенках серого на холсте? – Phylogenesis
Я хочу иметь возможность считывать значения оттенков серого в соответствующем диапазоне, потому что в нашем случае они будут преобразованы в другую, фактическую цветовую схему на основе этих значений, а затем отобразятся. Я посмотрю, смогу ли я это понять в своем вопросе. –
Возможно, вам удастся сохранить данные [в «Int16Array'] (https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Int16Array) для обработки перед отправкой на холст тогда. – Phylogenesis