java 2d划线 刷子_Java图形设计中,利用Bresenham算法实现直线线型,线宽的控制(NO2DGRAPHICS)...

a4c26d1e5885305701be709a3d33442f.png

Java图形设计中,利用Bresenham算法实现直线线型,线宽的控制(NO2DGRAPHICS)

(2007-04-05 23:37:39)

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()等其它方式,来实现刷子样式的设置.

文章引用自:http://locoy.kalvin.cn

分享:

a4c26d1e5885305701be709a3d33442f.png喜欢

0

a4c26d1e5885305701be709a3d33442f.png赠金笔

加载中,请稍候......

评论加载中,请稍候...

发评论

登录名: 密码: 找回密码 注册记住登录状态

昵   称:

评论并转载此博文

a4c26d1e5885305701be709a3d33442f.png

发评论

以上网友发言只代表其个人观点,不代表新浪网的观点或立场。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值