`
liduanpeng02
  • 浏览: 1648 次
社区版块
存档分类
最新评论

利用Graphics2D 画虚线框 边图

阅读更多

       学了好久的java, 但是没有思考过用它来画图,这几天公司有个需求,后台要画一个带二维码的合成图。我个人理解成3个图片的合成,一个是 背景图,一个是 带虚线边框的文案(根据入参变化),二维码(根据入参变化)。之前搞过一次背景图和二维码的合成,效果还是不错的。这次要加上文案,细细思考,似乎也不难。

思考过后,计划采用 Graphics2D 画笔 画文案。  

 思路如下:

 Graphics2D  drawString 画 字符串

 Graphics2D  setBackground(Color.WHITE) +  clearRect(0, 0, 120, 60) --> 画背景图(大小充满整张图片)

 Graphics2D  setStroke  设定画笔的粗细以及颜色,线条的特征,比如实线、虚线

 Graphics2D  drawRect  画 矩形,以整张图片的大小为数据

 

     

       实际操作过程中,遇到了以下几个问题:

 

     1.整张图片的大小:以实际需要的尺寸来定,大小 通过生成 BufferedImage bimg = new BufferedImage(120, 60,BufferedImage.TYPE_INT_RGB); 来生成,当然我这里的死的,参数都可以是动态的。

                    

     2.背景图变黑了: 实践说明 setBackground(Color.WHITE) +  clearRect(0, 0, 120, 60) 才能画上背景图,否则一直都黑。

 

     3.虚线边框(红色)

         a. 研究了BasicStroke ,发现可以满足需求。BasicStroke(float width, int cap, int join, float miterlimit,float dash[], float dash_phase)

         width: 线条的宽度

         cap:线条充满的幅度  CAP_BUTT, CAP_ROUND or CAP_SQUARE

         jion:线端交接的形状:比如圆角  JOIN_ROUND、三角  JOIN_MITER、平滑  JOIN_BEVEL 

         miterlimit: 配合JOIN_MITER使用,防止三角边的长度过长

        dash[]: 虚线的定义:“线+缺口+线+缺口+线+缺口… 比如: new float[] { 10, 5 }

        dash_phase 线条的偏移:与虚线有关,按照api定义,比如虚线 { 10, 5 }, 第一根线长 10,如何dash_phase为5,那么,整条虚线向后迁移 5 ,也就是说 第一根线长度只有5,其后的线长基本是10,缺口都是5.

        更详细的 BasicStroke 定义,可以参考  http://momsbaby1986.iteye.com/blog/1462901。

 

        b. Graphics2D.setColor(Color.RED)--设定线条的颜色

 

   4.文案drawString  不能换行,不认得\r\n,所以需要自己定义换行。这个可以找网上资料,比较多。大约都是 解析 字符串,遇到 \n,更改垂直坐标、水平坐标。但是我这里只有两行,简约几个字。所以简单的两个

               drawString 了事。

   5.图片生产: 老方法:ImageIO.write(bimg, "JPG", new FileOutputStream("d:\\picture\\cavas.jpg"));

 

  下面是代码,可以参考下,按照自己的需求改造。

     

public class TestRectant {
	public static void main(String[] args) throws Exception {

		BufferedImage bimg = new BufferedImage(120, 60,
				BufferedImage.TYPE_INT_RGB);
		// 得到Graphics2D 对象
		Graphics2D g2d = (Graphics2D) bimg.getGraphics();
		// 设置颜色和画笔粗细
		g2d.setBackground(Color.WHITE);
		g2d.setColor(Color.RED);
		// g2d.setStroke(new BasicStroke(3));
		BasicStroke stroke = new BasicStroke(2.5f, BasicStroke.CAP_BUTT,
				BasicStroke.JOIN_ROUND, 3.5f, new float[] { 10, 5 }, 0f);
		g2d.setStroke(stroke);
		g2d.clearRect(0, 0, 120, 60);// 通过使用当前绘图表面的背景色进行填充来清除指定的矩形。
		g2d.drawRect(0, 0, 120, 60);
		// 绘制图案或文字
		g2d.drawString("文本你好", 20, 30);
		g2d.drawString("文本你好", 20, 50);

		// 保存新图片
		ImageIO.write(bimg, "JPG", new FileOutputStream(
				"d:\\picture\\cavas.jpg"));
	}
}

   

   效果图:

   
 

 

        

 

 

  • 大小: 3.1 KB
分享到:
评论

相关推荐

    java Graphics2D 画流程图全代码,包含封装类工具类枚举的全部应用 并生成图片

    本项目的核心是利用Graphics2D来绘制流程图,结合枚举(ENUM)来组织和管理流程图的各种元素,如线条类型、形状等。流程图是一种表示算法、系统流程或工作流程的图形表示方式,它通过各种图形和连接线来清晰地表达...

    IOS画虚线边框

    此外,你还可以利用 CALayer 的 `borderWidth` 和 `borderColor` 属性来设置边框宽度和颜色,结合 `lineDashPattern` 来实现虚线效果。这种方式适用于那些不支持自定义绘图的视图,如UIButton或UILabel。 在实际...

    Java绘图:绘制虚线与实线javalearnsa资料分享

    总结起来,Java通过`Graphics2D`类和`BasicStroke`提供了强大的图形绘制能力,可以轻松地绘制虚线和实线。在实际项目中,开发者可以根据需求调整线条样式,实现各种复杂的图形效果。在探索这些概念时,参考...

    Java绘图:绘制虚线与实线.rar

      Graphics2D g2=(Graphics2D)g; //得到2D图形   Dimension dim = this.getSize(); //得到组件尺寸   g2.setColor(Color.white); //设置绘制颜色为白色   g2.fillRect(0, 0, dim.width, dim.height); //填充...

    java2d graphics源码

    通过`Graphics2D`对象,你可以绘制各种几何形状(如矩形、椭圆、线条)、路径、文本和图像。 2. `Shape` 接口:表示抽象的几何形状,包括闭合路径、线段等。常见的实现有`Rectangle2D`、`Ellipse2D`和`GeneralPath`...

    Java 2D API 程序员指南中文版

    - **绘制形状**:调用Graphics2D对象的方法,如draw()、fill()等来绘制形状。 - **文本渲染**:使用`Graphics2D.drawString()`方法在指定位置绘制文本,支持多语言和复杂的字体排版。 - **图片处理**:可以加载、...

    Java绘图:绘制虚线与实线

    `java.awt`包提供了基本的图形绘制类和接口,如`Graphics2D`,而`javax.swing`包则包含了用于创建GUI的组件,如`JFrame`。 创建一个简单的图形窗口,我们可以使用`JFrame`和`Canvas`。`Canvas`是用于绘制图形的基本...

    Java画虚线与画实线绘图实例代码.rar

    Java画虚线与实线,部分代码如下:super("实线与虚线"); //调用父类构造函数  setSize(300,200); //设置窗口尺寸  setVisible(true); //设置窗口可视  setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE); //关闭...

    Java 2D Graphics

    ### Java 2D Graphics 关键知识点解析 #### 一、Java 2D 概述 **Java 2D** 是 Java 平台的一个组件,它提供了丰富的 2D 图形和图像处理功能。通过 Java 2D API,开发人员可以轻松地在 Java 应用程序中实现高质量的...

    java中画带箭头的线

    在Java编程语言中,画带箭头的线是一项常见的图形绘制任务,主要应用于GUI(图形用户界面)开发或图表绘制。Java提供了丰富的图形库来支持这样的功能,其中最常用的是Java AWT(Abstract Window Toolkit)和Swing库...

    java-2D二维绘图,绘制直线,进行端点捕捉

    通过Graphics2D对象,我们可以进行各种绘制操作,如设置颜色、线型、填充模式等。 要绘制直线,我们首先需要创建一个Graphics2D对象。在Java GUI应用程序中,通常在paintComponent()方法中创建并使用这个对象。例如...

    java2d(中文教程)

    1. **Graphics2D**:这是Java 2D的主要绘图类,继承自Graphics。它提供了更高级别的绘图功能,如直线、曲线、矩形、圆形等,并支持复杂的变换、抗锯齿、颜色混合等特性。 2. **Shape**:表示2D几何形状,如Line2D、...

    Qt 2D 绘图

    画笔用于图形边框,同样可以设置颜色、宽度、样式(实线、虚线、点线等)。 4. **字体与文本**:Qt支持多种字体和文本格式,可以通过QFont对象进行设置,包括字体名称、大小、风格(粗体、斜体等)。QPainter::...

    GUI.zip.rar_按键画线_虚线点画线

    "GUI.zip.rar_按键画线_虚线点画线"这个标题暗示了一个项目或程序,它允许用户通过GUI来绘制图形,特别是利用按键操作来控制线条的样式,如实线、虚线和点画线,并可能包括改变线条颜色的功能。 首先,我们来讨论...

    graphics2d:Go的2D图形包,其中包含一些图像处理内容

    Go的另一个2D图形包尽管图像功能与我将要制作的功能一样完整,但仍处于开发阶段。 顶级的“路径”和“形状”类型是完整的,并且已实现大多数PathProcessor,包括: StrokeProc-具有多种上限和联接类型的固定宽度的...

    Java绘制图形和线段(实线和虚线).rar

    Java绘制图形和线段,绘制2D图形、设置绘制线条的颜色,用新的画刷绘制虚线,可以绘制实线和曲线,绘制颜色为白色,一个JAVA图形绘图的实例程序,以下代码仅供参考:  public LineDemo(){   super("实线与虚线"); ...

    IOS虚线绘置

    在这个方法中,我们将使用Core Graphics框架来绘制虚线。Core Graphics是苹果平台的一个低级2D绘图框架,支持多种图形操作,包括直线、曲线、填充和描边等。 ```swift override func draw(_ rect: CGRect) { guard...

    CGcontext 2D画图 demo

    这个"CGContext 2D画图 demo"是为初学者设计的,旨在教授如何利用CGContext进行基本的2D图形绘制。在这个教程中,我们将深入探讨CGContext的核心概念、方法以及如何使用它来实现虚线、贝塞尔曲线和画图片。 首先,...

    Simple 2D Graphics Library for C.zip

    "Simple 2D Graphics Library for C" 是一个专为C语言设计的库,它使得在C编程环境中创建和处理二维图形变得更为简单。这个库可能是为开发者提供了一系列的函数和结构,以支持基本的绘图操作,如绘制线段、矩形、...

    Java实用程序设计西电JavaGUI程序设计PPT学习教案.pptx

    在重写paint方法时,需要将传入的Graphics对象转换为Graphics2D,例如`Graphics2D graphics2d = (Graphics2D)g;`,然后就可以使用Graphics2D的方法进行复杂的2D绘图。 4. **BasicStroke类**: BasicStroke用于定义...

Global site tag (gtag.js) - Google Analytics