Вот обходное решение, которое требует от вас рисования линий по пикселям, но предотвратит сглаживание.
// some helper functions
// finds the distance between points
function DBP(x1,y1,x2,y2) {
return Math.sqrt((x2-x1)*(x2-x1)+(y2-y1)*(y2-y1));
}
// finds the angle of (x,y) on a plane from the origin
function getAngle(x,y) { return Math.atan(y/(x==0?0.01:x))+(x<0?Math.PI:0); }
// the function
function drawLineNoAliasing(ctx, sx, sy, tx, ty) {
var dist = DBP(sx,sy,tx,ty); // length of line
var ang = getAngle(tx-sx,ty-sy); // angle of line
for(var i=0;i<dist;i++) {
// for each point along the line
ctx.fillRect(Math.round(sx + Math.cos(ang)*i), // round for perfect pixels
Math.round(sy + Math.sin(ang)*i), // thus no aliasing
1,1); // fill in one pixel, 1x1
}
}
В принципе, вы найти длину линии, и шаг за шагом хода этой линии, округляя каждую позицию, и заполнение в пикселе.
Вызов его с
var context = cv.getContext("2d");
drawLineNoAliasing(context, 20,30,20,50); // line from (20,30) to (20,50)
Согласно [этому StackOverflow вопрос] (http://stackoverflow.com/questions/195262/can -i-turn-off-antialiasing-on-an-html-canvas-element) казалось бы, что canvas * * сглаживается по умолчанию. Какую ОС/браузер/версию вы используете? – Phrogz 2010-11-23 21:26:57
Когда вы говорите, что это негладко, что вы имеете в виду? Вы видите зубчатые края/пиксели или просто размыты? – 2011-03-08 10:18:30
Это происходит на Firefox Mobile на Android, на красной линии есть уродливая серая рамка. – 2014-03-24 10:06:19