0

假设我正在创建一个基于光栅的绘图程序。我的刷子是椭圆形的。用户单击然后拖动鼠标来绘制一个区域。我现在有两个点:pointA(他们单击的位置)和 pointB(从鼠标拖动返回的第一个点)。我想填充画笔区域内的所有像素。最好的方法是什么?

我的第一种方法是计算两点之间的斜率,然后从 A 点增加到 B 点。对于中间的每个点,我搜索椭圆范围内的所有像素,如果它们在范围内,则将它们打开。但这似乎效率低下,因为像素通常会被检查不止一次——通常是多次检查,因为增量比椭圆小得多(想想维恩图)。

有更好的方法吗?一种更有效且最小化需要检查像素的次数的方法。

4

1 回答 1

0

我目前正在做一些非常相似的事情,可以告诉你我在做什么:

  • 鼠标移动,我收到鼠标所在的点(x,y)
  • 我使用 Bresenham 算法来估计从一个鼠标位置到下一个鼠标位置的线(我没有得到每个像素的鼠标移动事件)。
  • 然后我沿着线以适当的间距(画笔的 20%)“标记”(又名画出)我的画笔笔尖(圆圈)。

因为我不知道你使用什么编程语言/框架,所以我不能给你代码:)

于 2011-05-23T13:07:15.413 回答