java 2d划线 刷子_月光软件站 - 编程文档 - Java - Java图形设计中,利用Bresenham算法实现直线线型,线宽的控制(NO 2D GRAPHICS)...
Java 2D Graphics提供了強大的畫線功能,可以控制線型,線寬,刷子的形狀等,但在JDK1.2以前,沒有提供這樣一個功能,為了保持與舊版JDK的相容,實現一個可控制線型,線寬的畫直線方法還是有必要的,下面是我寫的一個靜態方法,可直接用來畫各種類型的直線:
/**
*?Bresenham Line Algorithm
* @author Turbo Chen
* @version 1.0 copyright 2001
* @email turbochen@163.com
* @param dashedMask?設置線型的虛線的間隔,為0則畫實線。
* @param lineWidth 設置線寬。
* @param x1
* @param y1
* @param x2
* @param y2
*/
public static void bresenhamLine(java.awt.Graphics g, int dashedMask, int lineWidth, int x1, int y1, int x2, int y2)
{
int??x, y;
int??dx, dy;
int??incx, incy;
int??balance;
int i=0;
if (x2 >= x1)
{
dx = x2 - x1;
incx = 1;
}
else
{
dx = x1 - x2;
incx = -1;
}
if (y2 >= y1)
{
dy = y2 - y1;
incy = 1;
}
else
{
dy = y1 - y2;
incy = -1;
}
x = x1;
y = y1;
if (dx >= dy)
{
dy <<= 1;
balance = dy - dx;
dx <<= 1;
while (x != x2)
{
if ( (i & dashedMask)==0 )
g.fillOval(x, y,lineWidth,lineWidth);
if (balance >= 0)
{
y += incy;
balance -= dx;
}
balance += dy;
x += incx;
i ++;
}
if ( (i & dashedMask)==0 )
g.fillOval(x, y,lineWidth,lineWidth);
}
else
{
dx <<= 1;
balance = dx - dy;
dy <<= 1;
while (y != y2)
{
if ( (i & dashedMask)==0 )
g.fillOval(x, y,lineWidth,lineWidth);
if (balance >= 0)
{
x += incx;
balance -= dy;
}
balance += dx;
y += incy;
i ++;
}
if ( (i & dashedMask)==0 )
g.fillOval(x, y,lineWidth,lineWidth);
}
}
大家注意看程序中的g.fillOval()方法,也就是說我是用畫圓點的方式來畫線的,即刷子的樣式是圓頭型,你可以很容易的改變成g.fillRect()等其它方式,來實現刷子樣式的設置.
總結
以上是生活随笔為你收集整理的java 2d划线 刷子_月光软件站 - 编程文档 - Java - Java图形设计中,利用Bresenham算法实现直线线型,线宽的控制(NO 2D GRAPHICS)...的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: java exception子类_Jav
- 下一篇: mysql进阶3_MySQL进阶