Home  >  Article  >  Web Front-end  >  How to solve the problem of burrs in Canvas line drawing in Html5

How to solve the problem of burrs in Canvas line drawing in Html5

小云云
小云云Original
2018-03-03 10:16:522339browse

Html5 Canvas All the lines drawn by the line drawing instructions have burrs (such as lineTo, arcTo, strokeRect). This is because the position corresponding to the integer coordinate value in Canvas happens to be the gap between the screen pixels, then when When rendering lines according to such coordinates, what is used is the pixel points on both sides of the gap. In this way, even if lineWidth is set to 1, you will see a line with two pixel effects. The solution is to offset the original pixel point by +0.5 .

The following is a comparison of the effects before and after processing:

<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01//EN" "http://www.w3.org/TR/html4/strict.dtd">  
<html>  
<head>  
    <meta http-equiv="Content-Type" content="text/html; charset=utf-8">  
    <title>canvasTest</title>  
    <script type="text/javascript" src="http://www.pyzy.net/Demo/html5_cancas_js/excanvas.js"></script>  
    <script type="text/javascript">  
        var MyCanvas = function(boxObj, width, height) {  
            //序号、计数  
            this.index = arguments.callee.prototype.Count = (arguments.callee.prototype.Count || 0) + 1;  
            var cvs = document.createElement("canvas");  
            cvs.id = "myCanvas" + this.index;  
            cvs.width = width || 800;  
            cvs.height = height || 600;  
            (boxObj || document.body).appendChild(cvs);  
            //excanvas框架中针对ie加载canvas延时问题手动初始化对象  
            if (typeof G_vmlCanvasManager != "undefined") G_vmlCanvasManager.initElement(cvs);  
            //2D画布对象  
            this.ctx = cvs.getContext("2d");  
            /* * 绘制线条  
            * @ops JSON对象,可按实际支持属性扩展,示例:  { lineWidth:1,strokeStyle:&#39;rgb(255,255,255)&#39; }        
            * @dotXY:{ x:0, y:0 } ||[{ x:0, y:0 },{ x:0, y:0 }]  
            */  
            this.drawLine = function(dotXY, ops) {  
                this.ctx.beginPath();   
                for (var att in ops) this.ctx[att] = ops[att];  
                dotXY = dotXY.constructor == Object ? [dotXY || { x: 0, y: 0}] : dotXY;  
                this.ctx.moveTo(dotXY[0].x, dotXY[0].y);  
                for (var i = 1, len = dotXY.length; i < len; i++) this.ctx.lineTo(dotXY[i].x, dotXY[i].y);  
                this.ctx.stroke();  
            };  
        };  
        window.onload=function(){  
            var c1 = new MyCanvas();  
            c1.drawLine([{ x: 10, y: 10 }, { x: 10, y: 200 }],{lineWidth:2,strokeStyle:&#39;rgb(0,0,0)&#39;});  
            c1.drawLine([{ x: 11, y: 10 }, { x: 11, y: 200 }],{lineWidth:2,strokeStyle:&#39;rgb(255,255,255)&#39;});  
            c1.drawLine([{ x: 100, y: 10 }, { x: 100, y: 200 }],{lineWidth:1,strokeStyle:&#39;rgb(0,0,0)&#39;}); //普通线  
            c1.drawLine([{ x: 200.5, y: 10 }, { x: 200.5, y: 200 }],{lineWidth:1,strokeStyle:&#39;rgb(0,0,0)&#39;}); //+0.5偏移  
   
        }  
     
    </script>  
</head>  
<body>  
↓ 处理的  ↓ 普通的  ↓ +0.5偏移的<br />  
</body>  
</html>

Related recommendations:

##HTML5 Canvas line drawing skills ——Achieve drawing a thin line with a pixel width_html5 tutorial tips

The above is the detailed content of How to solve the problem of burrs in Canvas line drawing in Html5. For more information, please follow other related articles on the PHP Chinese website!

Statement:
The content of this article is voluntarily contributed by netizens, and the copyright belongs to the original author. This site does not assume corresponding legal responsibility. If you find any content suspected of plagiarism or infringement, please contact admin@php.cn