我不得不考虑编写一个库来处理 HTML5 画布的画线、粗线、圆形、正方形等的基本知识,因为我无法禁用嵌入在核心画布算法的浏览器渲染中的功能。
我是否被迫从头开始构建 HTML5 Canvas 渲染过程?如果我是,谁和我一起做这件事?谁想改变世界?
想象一个用 HTML5 编写的简单绘图应用程序......你绘制一个形状......一个像基本圆圈一样的闭合形状,自由的手,更像洋葱而不是圆圈(嗯,这就是我的样子!)......然后想象选择一个油漆桶图标并在您绘制的形状内单击并期望它填充您选择的颜色。
想象一下,当您选择“油漆桶”并单击形状的中间时,您会感到惊讶,它会用颜色填充您的形状......但是,不完全......等等......这是不对的!在您绘制的形状边缘的内侧,背景颜色与填充颜色和边缘颜色之间存在模糊......填充似乎有缺陷。
你想要一个直截了当的“油漆桶”/“填充”......你想画一个形状,然后用颜色填充它......别大惊小怪......用你的颜色填充你的形状的整个该死的内部选择。
您的网络浏览器已决定,当您绘制线条来定义您的形状时,它们将被消除锯齿。如果你为你的形状画一条黑线......好吧,浏览器会沿着边缘绘制灰色像素,在某些地方......让它看起来像一条“更好”的线。
是的,一条“更好”的线* * 完成了油漆/洪水填充过程。
支付浏览器开发人员公开属性以禁用其抗锯齿渲染的成本是多少?当然,禁用会为他们的渲染引擎节省几毫秒的时间!
呸,我真的不想使用 Bresenham 线渲染算法构建我自己的画布渲染引擎......可以做什么......这怎么能改变!!!???我需要针对WC3发起请愿吗????如果你有兴趣,你会包括你的名字吗???
更新
function DrawLine(objContext, FromX, FromY, ToX, ToY) {
var dx = Math.abs(ToX - FromX);
var dy = Math.abs(ToY - FromY);
var sx = (FromX < ToX) ? 1 : -1;
var sy = (FromY < ToY) ? 1 : -1;
var err = dx - dy;
var CurX, CurY;
CurX = FromX;
CurY = FromY;
while (true) {
objContext.fillRect(CurX, CurY, objContext.lineWidth, objContext.lineWidth);
if ((CurX == ToX) && (CurY == ToY)) break;
var e2 = 2 * err;
if (e2 > -dy) { err -= dy; CurX += sx; }
if (e2 < dx) { err += dx; CurY += sy; }
}
}