Javascript 将画布点转换为画布上下文点

Javascript 将画布点转换为画布上下文点,javascript,canvas,fabricjs,Javascript,Canvas,Fabricjs,我有一个用织物js制作的画布。我需要画1x1像素的矩形,鼠标按下事件在点击的坐标。在画布中单击时,如果之前已转换画布,则必须转换点。为此,我采用以下方法: const point = new fabric.Point(offsetX, offsetY); const invertedMatrix = fabric.util.invertTransform(canvas.viewportTransform) const transformedPoint = fabric.util.transfor

我有一个用织物js制作的画布。我需要画1x1像素的矩形,鼠标按下事件在点击的坐标。在画布中单击时,如果之前已转换画布,则必须转换点。为此,我采用以下方法:

const point = new fabric.Point(offsetX, offsetY);
const invertedMatrix = fabric.util.invertTransform(canvas.viewportTransform)
const transformedPoint = fabric.util.transformPoint(point, invertedMatrix);
转换点后,我只需添加矩形:

const p = new fabric.Rect({
 left: transformedPoint.x,
 top: transformedPoint.y,
 fill: 'red',
 width: 1,
 height: 1,
});
this.add(p);
问题是,变换后的点不是100%精确,矩形总是在距离原始点X像素处绘制

我写了一个片段来解释这种行为。上下文最初以60的缩放进行转换:

fabric.Object.prototype.selective=false;
const screenWidth=window.innerWidth;
const screenHeight=window.innerHeight;
canvas=newfabric.canvas('canvas');
canvas.setWidth(屏幕宽度);
canvas.setHeight(屏幕高度);
canvas.setZoom(60);
canvas.on('mouse:down',(opt)=>{
const evt=opt.e;
canvas.selection=false;
canvas.isDraging=true;
const point=新结构点(opt.e.offsetX,opt.e.offsetY);
const iM=fabric.util.invertTransform(canvas.viewportTransform);
const transformedPoint=fabric.util.transformPoint(point,iM);
const p=new fabric.Rect({
左:transformedPoint.x,
顶部:transformedPoint.y,
填充:“红色”,
宽度:1,
身高:1,,
});
canvas.add(p);
});
正文{
保证金:0;
}

我终于解决了这个问题。我以为问题是改变了这一点!但事实上,这是一件愚蠢的事情,因为这种织物在画一条看不见的边界。 我所要做的就是设置Object.strokeWidth=0