在背景缩放上绘制HTML5画布

用户名

我有问题,我有背景图像并使用鼠标滚轮更改其比例和位置,并且可以通过mousedown和mousemove事件进行绘制。me example: http://jsfiddle.net/74MCQ/现在看到第一个绘图和第二个缩放,我们看不到绘图线。如果需要在我的位置上进行绘图,并且需要缩放,则需要像油漆一样绘制。

游戏炼金术士

您需要一种在另一个画布中或通过存储坐标来存储用户图形的方法。

我建议您存储坐标,下面是一些代码,这些代码将在数组中存储行,每行都是一个坐标数组,例如:[x0,y0,x1,y1,x2,y2,...]。

编辑:现在我简化了事情,坐标相对于画布的中心存储。看到小提琴,它大部分都在工作。

小提琴:http : //jsfiddle.net/gamealchemist/74MCQ/4/

     function getMousePos(canvas, evt) {
        var rect = canvas.getBoundingClientRect();
        var x = evt.clientX - rect.left;
        var y = evt.clientY - rect.top;
        var sx = (x-cw/2)/scale;
        var sy = (y-ch/2)/scale;
        return {
            x: x,
            y: y,            
            sx : sx,
            sy:sy
        };
    }

    /****** PAINT ******/
    var isDrawing = false;
    var color = "#000000";
    var brushWidth = 10;
    //var previousEvent = false;
    ctx.strokeStyle = '#000000';

    var currentLine = null;
    var allLines = [];


    $("#canvas").mousedown(function (e) {
        var mousePos = getMousePos(canvas, e);
        ctx.moveTo(mousePos.x, mousePos.y);
        isDrawing = true;
        if (currentLine) allLines.push(currentLine);
        currentLine = [];
        currentLine.push(mousePos.sx, mousePos.sy);
    });

    $("#canvas").mouseup(function () {
        isDrawing = false;
        if (currentLine) allLines.push(currentLine);
        currentLine = null;
    });

    $("#canvas").mouseout(function () {
        isDrawing = false;
        if (currentLine) allLines.push(currentLine);
        currentLine = null;
    });

    $("#canvas").mousemove(function (e) {

        if (isDrawing === true) {
            var mousePos = getMousePos(canvas, e);
            currentLine.push(mousePos.sx, mousePos.sy);

            //paint tools, effects
            ctx.lineWidth = 10;
            ctx.strokeStyle = color;
            ctx.shadowBlur = 1;
            ctx.shadowColor = 'rgb(0, 0, 0)';
            ctx.lineTo(mousePos.x, mousePos.y);
            ctx.stroke();
        }
    });

    function drawStoredLines() {
        var thisLine;
        for (var i = 0; i < allLines.length; i++) {
            thisLine = allLines[i];
            drawLine(thisLine);
        }
    }

    function drawLine(ptArray) {
        if (ptArray.length <= 2) return;
        ctx.beginPath();
        ctx.moveTo(ptArray[0], ptArray[1]);
        for (var p = 2; p < ptArray.length; p += 2) {
            ctx.lineTo(ptArray[p], ptArray[p + 1]);
        }
        ctx.lineWidth = 10;
        ctx.strokeStyle = color;
        ctx.shadowBlur = 1;
        ctx.shadowColor = 'rgb(0, 0, 0)';
        ctx.stroke();
    }

请注意,我无法抗拒减少您的175行代码以选择比例尺到25行一个:-)

    var zoomSteps = [0.1, 0.2, 0.4, 0.6, 0.8, 1.0, 1.5, 2.0, 3.0, 4.0];
    var zoomIndex = zoomSteps.indexOf(1);

    function doScroll(e) {
        e = window.event || e;
        var delta = Math.max(-1, Math.min(1, (e.wheelDelta || -e.detail)));
        zoomIndex = zoomIndex + delta;
        if (zoomIndex < 0) zoomIndex = 0;
        if (zoomIndex >= zoomSteps.length) zoomIndex = zoomSteps.length - 1;
        scale = zoomSteps[zoomIndex];
        imageWidthZoomed = imageWidth * scale;
        imageHeightZoomed = imageHeight * scale;

        var mousePos = getMousePos(canvas, e);

        draw(mousePos.x, mousePos.y, scale);
    }

本文收集自互联网,转载请注明来源。

如有侵权,请联系[email protected] 删除。

编辑于
0

我来说两句

0条评论
登录后参与评论

相关文章

来自分类Dev

如何在具有更好插值的html5画布上缩放图像?

来自分类Dev

禁用html5画布

来自分类Dev

禁用html5画布

来自分类Dev

为什么缩放后的HTML5画布上的“像素”奇怪地对齐?

来自分类Dev

RXJS在HTML5画布上绘制线条

来自分类Dev

HTML5画布在背景图像上进行缩放

来自分类Dev

在背景缩放上绘制HTML5画布

来自分类Dev

HTML5画布脉动

来自分类Dev

了解HTML5画布

来自分类Dev

将HTML5画布缩放为div的宽度和高度

来自分类Dev

使用for循环绘制HTML5画布圆

来自分类Dev

如何在不缩放的情况下使用HTML5画布翻转图像

来自分类Dev

实时HTML5画布绘制

来自分类Dev

缩放HTML5画布图像

来自分类Dev

缩放和旋转后,HTML5画布会回移

来自分类Dev

清除画布后未绘制图像(html5画布)

来自分类Dev

如何缩放HTML5画布而不使其模糊?

来自分类Dev

无法在html5画布上绘制

来自分类Dev

html5画布绘制多个图像

来自分类Dev

HTML5画布图案绘制延迟

来自分类Dev

相对于HTML5画布缩放文档上的鼠标坐标

来自分类Dev

HTML5画布缩放,其中鼠标坐标

来自分类Dev

HTML5画布脉动

来自分类Dev

通过从图像中心旋转并缩放来拉直HTML5画布中的图像

来自分类Dev

如何在HTML5画布上绘制背景图像

来自分类Dev

将HTML5画布缩放为div的宽度和高度

来自分类Dev

连续绘制HTML5画布

来自分类Dev

HTML5画布-绘制环形扇形

来自分类Dev

html5画布部分绘制