Можно ли получить более 8-битные значения цвета из getImageData?

Я пытаюсь манипулировать пикселями на холсте html5. С помощью метода getImageData я получаю только Uint8Array со значениями RGBA холста. Есть ли возможность получить массив с большей точностью? Я хотел бы манипулировать всеми 16-битными значениями цвета изображения.

2 ответа

Решение

Нет, поскольку цветовое пространство контекста холста должно соответствовать цветовому пространству значений цвета CSS:

В пользовательских агентах, которые поддерживают CSS, цветовое пространство, используемое элементом canvas, должно соответствовать цветовому пространству, используемому для обработки любых цветов для этого элемента в CSS.

Также текущая спецификация ImageData предоставляет только 8-битный массив:

interface ImageData {
  readonly attribute unsigned long width;
  readonly attribute unsigned long height;
  readonly attribute Uint8ClampedArray data;
};

Рекомендации

В настоящее время обычное цветовое разрешение большинства систем отображения составляет 8 бит на канал цвета и пиксель (32 бита на пиксель RGBA), и вряд ли оно увеличится в ближайшем будущем, потому что человеческий глаз не может различить гораздо меньшие цветовые оттенки. По этой причине getImageData и setImageData работают с 8 битами на цветовой канал.

Более высокое цветовое разрешение обычно требуется только для обработки изображения. Если вы хотите выполнить операции обработки изображения в 16 битах на канал или более для внутреннего использования, вы всегда можете сами преобразовать значения, возвращаемые getImageData, и преобразовать их обратно в 8 бит, прежде чем возвращать их с помощью setImageData.

Другие вопросы по тегам