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

分享:

喜欢

0

赠金笔

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

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

发评论

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

昵   称:

评论并转载此博文

发评论

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

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

  1. java 2d划线 刷子_月光软件站 - 编程文档 - Java - Java图形设计中,利用Bresenham算法实现直线线型,线宽的控制(NO 2D GRAPHICS)...

    Java 2D Graphics提供了强大的画线功能,可以控制线型,线宽,刷子的形状等,但在JDK1.2以前,没有提供这样一个功能,为了保持与旧版JDK的相容,实现一个可控制线型,线宽的画直线方法还是 ...

  2. java 2d划线 刷子_简易画板的JAVA实现

    要实现一个画图板,首先我们要掌握的是图形界面开发和事件监听机制.在Java中,图形界面开发有三套组件: 1.AWT组件:这是JDK1.0推出的图形组件类,位于java.awt这个包下.AWT组件被称为 ...

  3. 并发型服务器响应方式,Java NIO 在并发型服务器设计中的应用.pdf

    Java NIO 在并发型服务器设计中的应用 丁辉 北京邮电大学PCN&CAD 中心,北京(100876 ) E-mail :lvsehaier@ 摘 要:本文分析了应用传统阻塞型网络I/O ...

  4. java 2d 绘图教程_Java标准教程:Java 2D绘图--第2章 从绘图开始

    Java标准教程:Java 2D绘图--第2章从绘图开始 Java 2D API是强大并且复杂的.然而,大多数Java 2D API只用到了封装在java.awt.Graphic类中的功能的自己.本节 ...

  5. java多功能计算器_Java课程设计多功能计算器 PDF 下载

    1.摘要: 为复习巩固Java语言的基础知识,进一步加深对java语言的理解和掌控.同过本课程设计使自身能够全面的掌握面向对象程序设计的有关概念和开发方法,以便能较全面地理解.掌握和综合运用所学的知识 ...

  6. java 公交管理系统 代码_JAVA课程设计报告公交管理系统.pdf

    Java期末课程设计 -- Busmanagerment 课程名称:算法设计与分析 任课老师:吴倩 学生姓名:谢秀华 学生学号:1037005 所在院系:信息工程学院 班级: 10计算机1班 一.前言 ...

  7. java 字符串 字符查找_java之字符串中查找字串的常见方法

    1.int indexOf(String str) :返回第一次出现的指定子字符串在此字符串中的索引. int indexOf(String str, int startIndex):从指定的索引处开 ...

  8. java类的不变约束_设计中的变与不变

    古希腊哲学家巴门尼德认为:"人的思想和言语都有一个载体,如果你在这一时间和另外一个时间想到或者谈到同样一件东西,那就说明这件东西在这段时间内没有变化,如有变化的话,你说的就不是同一件东西.& ...

  9. java字符串去掉中文_Java——去除字符串中的中文

    import java.util.regex.Matcher; import java.util.regex.Pattern; public class RemoveStrChinese { priv ...

最新文章

  1. java菜单动态加载功能_Javascript实现动态菜单添加
  2. JVM指令详解(上)
  3. 常用组策略故障排除工具
  4. AJAX技术入门 第五节 Javascript高级知识
  5. 牛客多校8 - All-Star Game(线段树分治+并查集按秩合并的撤销操作)
  6. JavaScript三种创建构造函数的方式
  7. UI设计插画素材|移动设备和网络屏幕
  8. Jquery实现滚动到底部加载更多(最原始)
  9. 复旦nlp实验室 nlp-beginner 任务一:基于机器学习的文本分类
  10. 飞Young任意路由器连接[破解路由器限制]
  11. Nopcommerce kendo UI Roxy Fileman控件的汉化
  12. ps保存时显示和服务器不兼容,PS保存文件时出现最大兼容性是什么意思?Photoshop最大兼容性问题讲解...
  13. 项目经理应该知道的三种项目管理技术
  14. 一个测试浏览器速度的网站
  15. 基于帕累托的多目标遗传算法优化的原理与 Python 实现
  16. QWT--滚轮放大缩小和拖拽视窗
  17. ModuleNotFoundError: No module named ‘pandas.tseries‘
  18. 天谕搬砖哪个服务器稳定,天谕手游搬砖玩什么职业好 搬砖强势职业推荐
  19. 歌曲:我愿爱(tvb台庆剧插曲)
  20. 从现在开始,学习编程

热门文章

  1. QQ第三方登录报错error=-1
  2. 基于hi-nginx的web开发(python篇)——路由装饰器
  3. thinkphp 查找表并返回结果
  4. 位操作符:位与、|位或、^异或、~求反、左移位、带符号右移位、无符号右移位...
  5. python 递归调用
  6. Linux下安装jdk1.6
  7. JSP实现酒店预定系统
  8. java中的异常及其处理
  9. 通过Spark listener实现Direct模式读取Kafaka数据
  10. P2762 太空飞行计划问题