Я внедряю доску в существующее приложение, которое оптимизировано для огромных сенсорных экранов (дисплей NEC). Сам холст находится в виджете, размер которого можно изменить, это означает, что видимая часть холста может варьироваться от 400x500 пикселей до полноэкранного размера. Однако корректируется только область просмотра, холст всегда имеет полноэкранный размер в beackround (и выровнен по верхнему левому углу виджета), поэтому объекты не искажаются по размеру и соотношению при изменении размера виджета. Это означает, что при рендеринге изображения с помощью canvas.toDataUrl('png')
изображение всегда имеет одинаковый размер.
Теперь мы хотим добавить функцию, позволяющую прокручивать сам холст, для простоты предположим, что его размер составляет 3x3 на весь экран, то есть если вам нужно больше места, вы можете прокрутить один размер экрана влево или вправо, соответственно. сверху или снизу. Это не сложно, но теперь мы подходим к моему вопросу:
Можно ли настроить функцию рендеринга, чтобы изображение отображалось не по всему размеру холста, а по размеру "ограничительной рамки" всех элементов, соответственно? только выбранные элементы? Вот изображение, чтобы объяснить:
![enter image description here](https://i.stack.imgur.com/yk3mr.png)
На этом рисунке черный квадрат представляет точный размер холста (и поэтому изображение, которое визуализируется), но я ищу способ визуализации только красного квадрата (скажем, все элементы плюс отступ x пикселей ).
По-настоящему хакерским способом было бы следующее, но я не уверен, есть ли более простой способ:
- создать невидимый "imageRenderCanvas"
- при рендеринге, рассчитать верхний и левый крайние уголки, правый и нижний крайний угол, вычислить размер этой «ограничительной рамки»
и добавьте 2 x отступа к каждой стороне и установите этот размер на
imageRenderCanvas
- поместить (выбранные) объекты в положение
0+padding / 0+padding
- визуализировать холст как изображение
Есть ли другой способ сделать это?