2013-08-22 2 views
10

Итак, я вижу, что есть несколько новых (иш) функций, которые предлагаются; toDataURLHD, toBlobHD, getImageDataHD и т. Д., Который «возвращает [данные] в исходном растровом разрешении холста» (http://developers.whatwg.org/the-canvas-element.html).toDataURL vs toDataURLHD

Но я не понимаю терминологию. Означает ли это, что существуют ситуации, когда версии, отличные от HD, будут перемасштабировать данные изображения, прежде чем возвращать их? (то есть на дисплее с высоким разрешением может toDataURL создать изображение, которое является более низким, чем фактическое полотно), или это просто ссылается на метаданные пикселей на дюйм на изображении?

Я экспериментировал с таким количеством методов масштабирования, как я могу думать (скрипка: http://jsfiddle.net/SktKQ/), и он всегда кажется пиксельным для пикселя, но это вряд ли является убедительным, и у меня нет доступа к каким-либо высоким -resolution для тестирования.

Все, что я смотрю на это: я могу рассчитывать на toDataURL & Co. произвожу пиксель для пикселя копии моего холста, которые имеют ширину и высоту точно равную атрибутов набора на элементе? (И если да, то какой смысл из версий HD?)

ответ

4

WhatWG documents on canvas сказать следующее:

Размер координатного пространства не обязательно отражают размер фактических растровых изображений этого агента пользователя будет использоваться внутри или во время рендеринга. Например, на дисплее высокой четкости пользовательский агент может внутренне использовать растровые изображения с двумя пикселями устройства на единицу измерения в координатном пространстве, так что рендеринг остается на высоком уровне. Сглаживание аналогично может быть реализовано с использованием избыточной выборки с растровыми изображениями с более высоким разрешением , чем конечное изображение на дисплее.

И

Метод toDataURL() возвращает данные с разрешением 96 dpi. Метод toDataURLHD() возвращает его в собственном растровом разрешении холста.

Как я понимаю, это то, что toDataURL просто возвращает CSS-пиксели (при 96 DPI); но реализация может использовать более высокую плотность пикселей, которая будет видна только через toDataURLHD. То есть, даже если вы определяете свой холст размером 800x600, являясь размером пикселя CSS, реализация может фактически использовать плотность 192 DPI (1600x1200); если вы используете первое, вы получите 800x600, тогда как метод HD обеспечит вам фактические пиксели, гарантированные.

Кроме того, следующие сказано:

Таким образом, в 2D-контексте, вызывая метод DrawImage(), чтобы сделать вывод метода toDataURLHD() на холст, учитывая соответствующие размеры, имеет нет видимого эффекта.

Однако не гарантируется, что использование данных изображения от toDataURL не будет иметь видимого эффекта (из-за худшего разрешения).

+0

Невозможно, о чем я думал.Итак, если я установил холст на 100x100 на дисплее с 2x-разрешением, я * мог бы * получить холст размером 200x200 (отображается на 100x100). В этом случае 'toDataURL' будет выдавать изображение размером 100x100 (уменьшенным некоторым способом), но' toDataURLHD' будет давать пиксельное изображение размером 200x200 пикселей. Это соответствует вашему пониманию? (связанный вопрос: могу ли я заставить его не создавать более крупное изображение на дисплеях с высоким разрешением?) – Dave

+0

Я думаю, что это тоже мое понимание, однако я просто прочитал документы. Я думаю, что это касается таких устройств, как новые дисплеи сетчатки на материалах Apple; они могут использовать расширенные возможности рендеринга устройств и в то же время планировать их одинаково. –

+0

Что касается «заставить его не создавать большее изображение», тогда я не мог найти ответ в любом случае –

Смежные вопросы