Я использую два html-холста, fronendCanvas виден для пользователей и является частью дерева DOM html и имеет 100% ширины и высоты окна, а backendCanvas создается на javascript и используется, чтобы содержать огромную диаграмму, которую мне нужно сделать.Ошибка холста drawImage
/** FrontendCanvas */
// HTML
<canvas id="canvas"></canvas>
// JavaScript
frontCanvas.width = window.innerWidth;
frontCanvas.height = window.innerHeight;
// CSS
#canvas {
display: block;
background-color: #dddddd;
}
/** BackendCanvas */
// JavaScript
backCanvas = document.createElement('canvas');
backCanvas.width = diagram.maxX;
backCanvas.height = diagram.maxY;
В принципе, иметь гладкую визуализацию в frontendCanvas показывает только часть огромного изображения, проведенное в backendCanvas с помощью функции DrawImage (пользователя может использовать мышь, чтобы перетащить область визуализации по схеме, смотрите пример Move HTML5 Canvas with a background image).
frontCanvas.getContext('2d').drawImage(
backCanvas,
(-ix - offsetX),
(-iy - offsetY),
(frontCanvas.width),
(frontCanvas.height),
0,
0,
(frontCanvas.width),
(frontCanvas.height)
);
Когда я устанавливаю backendCanvas ширина и высота до 15000 все работает нормально, но когда я установил его размер, что мне на самом деле нужно, ширина 62322 и высота 50946, как-то DrawImage не работает больше и бросает ошибку размер:
IndexSizeError: Index or size is negative or greater than the allowed amount
(frontCanvas.height)
Мое предположение было бы, что я тянусь максимальный размер холста, и это сброшена, но это не кажется, случай, потому что:
, ссылка на холст говорит, что ширина и высота холста - это длина без знака, поэтому намного больше, чем числа, о которых я упоминал;
Я проверил размер backendCanvas прямо перед вызовом функции drawImage, и это правильно.
Любая помощь будет очень признательна!
Спасибо.
Последний раз, когда я смотрел, размер макс. Холста был значительно ниже 50946 (я смутно помню, что у Chrome был самый большой допустимый размер при 32K + -). В любом случае, просто проверьте его самостоятельно, увеличив размер context.rect, пока не получите ошибку. И, некоторые математические: 62322 x 50946 x 4 байта на пиксель 12GB + требуется память. – markE
Я видел, например, здесь (http://www.whatwg.org/specs/web-apps/current-work/multipage/the-canvas-element.html # the-canvas-element), что максимальное значение ширины и высоты было беззнаковым долго, но в действительности ваши вычисления имеют смысл. Так что в основном то, что я делаю, невозможно. Может быть, мне нужно сделать что-то вроде рисования, если оно видно, и называть это каждый раз, когда пользователь нажимает на экран. Большое спасибо за ответ. – Emanuel