使用drawImage()的HTML5 Canvas堆叠图像不会收敛到正确的颜色?

时间:2012-10-03 05:35:44

标签: javascript html5 canvas

我正在使用HTML5画布制作绘图应用。要在主画布上绘画,我调用drawImage()并将包含画笔图像的单独画布的内容粘贴到鼠标位置。

我可以设置画笔画布的不透明度,当你绘制时,你可以清楚地看到实例堆栈并将它们混合在一起,就像它们应该的那样。当不透明度设置为低,如0.01时,就会出现问题。你可以在一个地方涂鸦一段时间,但它永远不会完全收敛到画笔颜色。刷子颜色为#000000时,它将停止在#2a2a2a处堆叠。

我能做些什么吗?这是一个示例应用程序。

<head>
    <style type="text/css">
        #canvas1 {
            border: 1px solid #000;
        }

        #canvas2 {
            border: 1px solid #000;
        }
    </style>
</head>

<body>

    <canvas id="canvas1" width="300" height="300">
    </canvas>

    <canvas id="canvas2" width="20" height="20">
    </canvas>

    <script type="text/javascript">

        var elem1 = document.getElementById("canvas1");
        var elem2 = document.getElementById("canvas2");
        var context1 = elem1.getContext("2d");
        var context2 = elem2.getContext("2d");

        var drawing = false;

        init();

        function init() {
            //draw brush
            var alpha = 0.01;    //opacity of the brush
            context2.fillStyle = "rgba(0, 0, 0, " + alpha + ")";
            context2.beginPath();
            context2.arc(10, 10, 10, 0, Math.PI*2, true); 
            context2.closePath();
            context2.fill();

            elem1.addEventListener("mousedown", function(){startdraw()});
            elem1.addEventListener("mouseup", function(){enddraw()});
            elem1.onmousemove = draw;
        }

        function startdraw() {
            drawing = true;
        }

        function enddraw() {
            drawing = false;
        }

        function draw(ev) {
            if(drawing) {
                context1.drawImage(elem2, ev.pageX - this.offsetLeft - 10, ev.pageY - this.offsetTop - 10);
            }
        }

    </script>
</body>

0 个答案:

没有答案