对于我的应用程序,我试图将所有内容移动到任意垂直接缝线的右侧,向左移动一个像素。目前我正在使用 O(n^2) for 循环并手动编辑像素数据,但不幸的是这太慢了。
我有以下想法:将原始图像绘制到画布上,创建接缝Path2D,在接缝右侧创建所有内容的剪切区域,然后将该区域向左绘制一个像素。
不幸的是,这种剪切似乎不是像素完美的,而是在图像中引入了抗锯齿功能。
这是演示该问题的代码示例:
function getRandomInt(min, max) {
min = Math.ceil(min);
max = Math.floor(max);
return Math.floor(Math.random() * (max - min) + min);
}
const canvas = document.getElementById('canvas');
const ctx = canvas.getContext('2d');
ctx.imageSmoothingEnabled = false;
ctx.beginPath();
ctx.strokeStyle = "#00000000";
ctx.moveTo(50, 0);
for (let i = 1; i < 200; i++) {
ctx.lineTo(50 + getRandomInt(-1, 2), i);
}
ctx.lineTo(500, 200);
ctx.lineTo(500, 0);
ctx.lineTo(50, 0);
ctx.stroke();
ctx.clip();
ctx.fillStyle = 'blue';
ctx.fillRect(0, 0, canvas.width, canvas.height);
ctx.fillStyle = 'orange';
ctx.fillRect(0, 0, 100, 100);
<canvas id="canvas" width="300" height="300">
正如您所看到的,接缝在切口中引入了抗锯齿功能。有没有办法创建像素完美且不抗锯齿的剪切区域?
我还尝试添加image-rendering: pixelated;
到样式表中,虽然它似乎有一点帮助,但仍然在进行抗锯齿处理。
九州编程
相关分类