Оригинальный текст из моего блога на github
тема
Сколько памяти занимает холст размером 100*100?
существуетТри года фронтенда, интервьюЯ упомянул очень инновационную тему, и здесь я поделюсь ходом мыслей во время интервью.
Идеи решения проблем
На самом деле, я не знаю, насколько реален ответ.Во время интервью интервьюер не ожидает точного ответа, а зависит от вашего мыслительного процесса.
Если вы знакомы с Canvas и работали с фильтрами, возможно, вы вызывалиimageData = ctx.getImageData(sx, sy, sw, sh);
этот API. Я помню, что этот API возвращает массив ImageData, содержащий пиксельные данные прямоугольника, представленного sx, sy, sw, sh.
И этот массив имеет тип Uint8, и четыре бита представляют собой пиксель.
Я могу вспомнить эту информацию только во время интервью. Предположим, когда мы определяем цвет, мы используем rgba(r,g,b,a) для представления четырех измерений, и каждое значение пикселя представлено шестнадцатью битами 00-ff, то есть диапазон каждого измерения составляет 0 ~ 255, то есть 2^8 бит, то есть 1 байт, то есть диапазон, который может представлять Uint8.
Таким образом, память, занимаемая холстом 100 * 100, составляет 100 * 100 * 4 байта = 40 000 байт.
утверждение
Ответы здесь не обязательно точны.
Альфа дебаты
Некоторые студенты указали, что альфа не 0-100? Сначала у меня был тот же вопрос, но в этой статьеdeveloper.Mozilla.org/en-US/docs/…Сказать
The data property returns a Uint8ClampedArray which can be accessed to look at the raw pixel data; each pixel is represented by four one-byte values (red, green, blue, and alpha, in that order; that is, "RGBA" format). Each color component is represented by an integer between 0 and 255.
То есть даже альфа 0-255
Итак, как представить альфу?
В следующем фрагменте кода
Видно, что вам нужно использовать только 0-255 для представления 0-100~.
использованная литература
CanvasRenderingContext2D.getImageData() возвращает объект ImageData, который используется для описания пиксельных данных, подразумеваемых областью холста.Эта область представлена прямоугольником, начальная точка (sx, sy), ширина sw, высота ш.
Uint8ClampedArray описывает одномерный массив, содержащий данные в порядке RGBA, представленном целыми числами от 0 до 255 (включительно).
- developer.Mozilla.org/this-cn/docs/…
- developer.Mozilla.org/this-cn/docs/…
- developer.Mozilla.org/en-US/docs/…
найм
Ant Financial - Micro Loan Business Group Recruitment Front-end Вы можете отправить свое резюме наyanqi.zyq@antfin.comТема письма: резюме-имя-интерфейс Прикрепите свое резюме