По сути, у меня есть веб-страница, которая отображает отрывок изображения из документа с использованием drawimage(x,z,width,height)
. Пользователь может нарисовать прямоугольник вокруг любой линии на изображении, щелкнув эту линию. Затем на изображении будет нарисован прямоугольник с использованием rect(x,y,w,h)
.
Используя лупу javascript, пользователь может навести курсор на изображение, чтобы увидеть его увеличенную версию. Однако он не показывает прямоугольник, нарисованный на изображении на холсте.
Можно ли нарисовать и прямоугольник, и изображение? в настоящее время это настройка лупы:
// - Setup the magnifier component
var glass, w, h, bw;
glass = document.getElementById("magnifier"); // Get pre-existing div for the magnifier
glass.setAttribute("class", "img-magnifier-glass");
// set background properties for the magnifier glass:
glass.style.backgroundImage = 'url("'+pRow.getValue("imgPath")+'")'; //pRow here refers to a parameter array that is passed in containing data about the image and rectangle
glass.style.backgroundRepeat = "no-repeat";
glass.style.backgroundSize = imgwidth + "px " + imgheight + "px";
bw = 3; // Border width of the magnifier glass.
w = glass.offsetWidth / 2;
h = glass.offsetHeight / 2;
Позже есть код для фактического перемещения положения фона. Но я не вижу способа показать прямоугольник, нарисованный поверх изображения, на холсте, на лупе.
Если вам требуется дополнительная информация о написанном мной коде, дайте мне знать .
Обновление:
Проведя дополнительные исследования, я пришел к мысли, что можно было бы нарисовать 2 лупы на экране. Верхняя лупа будет рисовать прямоугольник, и поскольку это всего лишь прямоугольник с пустым пространством за ним, лупа должна нарисовать прямоугольник поверх изображения, которое увеличивается, так как увеличенное изображение находится на нижнем лупе.
Я еще не тестировал это, чтобы увидеть, работает ли он так, как я ожидал, или даже можно ли нарисовать на экране две лупы, как я планирую. Я попробую сегодня это проверить. А пока может кто-нибудь сообщить мне, сработает ли это или есть другой способ лучше? Спасибо за любую помощь в решении, как это сделать.
Обновление 2:
Исследование моей идеи обнаружило интересный механизм c. Если я поставлю c.parentElement.insertBefore(c,glass)
, ничего не изменится. НО если я поставлю c.parentElement.insertBefore(glass, c)
, увеличится изображение ЗА ХОЛСТОМ ! Поэтому я считаю, что если я нарисую холст поверх существующего, нарисуйте на нем прямоугольник. Затем, используя эту строку, я теоретически мог бы поместить лупу между прямоугольником и изображением, которое затем будет вести себя желаемым образом без необходимости увеличения нескольких элементов. *
Update 3:
Turns out that I require the rectangle to be linked with the image location so that when you move the magnifier down, the rectangle is still correct relative to the magnification Here is a visual aid of the actual requirement when you move the magnifier:
Update 4:
From discussion of this issue with my fellow workers, it might be possible to apparently draw the rectangle onto the master image that is being used to magnify. I have absolutely no idea how I would do so and nor do I know if the magnifier can pick up rectangle if I somehow learned how to drawn a rectangle onto the master image instead of the canvas image. to better explain here is a visual aid
введите описание изображения здесь
Мои сослуживцы, кажется, верят, что можно каким-то образом нарисовать прямоугольник на немасштабированном изображении, чтобы лупа уловила его. Я не знаю, знает ли Javascript, как это сделать, и не знаю, сможет ли лупа отобразить изменения, если они были реализованы