Элементы на холсте исчезают с jsfiddle

У меня проблема с использованием fabric.js на холсте. После изменения размера с коэффициентом масштабирования 5x, двойного нажатия ZoomIn элементы на холсте исчезают. Пожалуйста, посмотрите: http://jsfiddle.net/ptCoder/Q3TMA/90/

Размер холста (для примера):

<canvas id="c" width="400" height="400"></canvas>

Масштабный коэффициент масштабирования:

var SCALE_FACTOR = 5;

Есть ли решение?

Спасибо.


person ptCoder    schedule 24.04.2013    source источник


Ответы (1)


Проблема в том, что вы также изменяете размер холста, поэтому после увеличения в 2 раза его размер составляет 10000 пикселей * 10000 пикселей, то есть 100 мегапикселей, и требуется несколько сотен мегабайт памяти.

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

Чтобы сохранить постоянный размер, вам просто нужно удалить эти две строки:

canvas.setHeight(canvas.getHeight() * SCALE_FACTOR);
canvas.setWidth(canvas.getWidth() * SCALE_FACTOR);
person ValarDohaeris    schedule 24.04.2013
comment
@ptCoder: Точно, твои элементы никуда не делись! После 2-кратного увеличения они находятся за пределами холста вниз и вправо. Обратите внимание на полосы прокрутки, которые появляются после масштабирования. Просто прокрутите вниз и вправо, и ваши элементы все еще там. - person markE; 25.04.2013
comment
Спасибо за ваш ответ. Но мне нужен большой холст, чтобы преобразовать холст, например, в 300 или 600 DPI. Мне нужен большой размер холста. Есть ли решение? - person ptCoder; 25.04.2013
comment
@markE, какой у тебя браузер? Один новый пример с холстом размером 10000x10000 пикселей. Вы нажимаете ZoomIn 6/7 раз, и холст полностью исчезает. Пожалуйста, проверьте это: jsfiddle.net/ptCoder/Q3TMA/95 - person ptCoder; 25.04.2013
comment
Да, так что, вероятно, зависит от вашего браузера/системы, что происходит с холстом 10000x10000. Я не знаю, чего именно вы пытаетесь добиться, но я почти уверен, что это возможно без создания такого гигантского холста... - person ValarDohaeris; 25.04.2013
comment
IE10, нажимая Zoom-in 3X, работает нормально. Четвертое увеличение действительно вызывает ваше исчезновение (вероятно, превышение возможностей браузера). Но 3X дает вам от 72 dpi до 72 * 2 * 2 * 2 = 576 dpi при изменении масштаба. - person markE; 25.04.2013
comment
Есть ли другой вариант создания изображений с холста с разрешением 300/600 точек на дюйм? Я думаю, что мне нужно создать большой холст. Но у меня такая проблема :( - person ptCoder; 25.04.2013
comment
Использование Node.js является возможным решением? - person ptCoder; 25.04.2013