学了好久的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")); } }
效果图:
相关推荐
本项目的核心是利用Graphics2D来绘制流程图,结合枚举(ENUM)来组织和管理流程图的各种元素,如线条类型、形状等。流程图是一种表示算法、系统流程或工作流程的图形表示方式,它通过各种图形和连接线来清晰地表达...
此外,你还可以利用 CALayer 的 `borderWidth` 和 `borderColor` 属性来设置边框宽度和颜色,结合 `lineDashPattern` 来实现虚线效果。这种方式适用于那些不支持自定义绘图的视图,如UIButton或UILabel。 在实际...
总结起来,Java通过`Graphics2D`类和`BasicStroke`提供了强大的图形绘制能力,可以轻松地绘制虚线和实线。在实际项目中,开发者可以根据需求调整线条样式,实现各种复杂的图形效果。在探索这些概念时,参考...
Graphics2D g2=(Graphics2D)g; //得到2D图形 Dimension dim = this.getSize(); //得到组件尺寸 g2.setColor(Color.white); //设置绘制颜色为白色 g2.fillRect(0, 0, dim.width, dim.height); //填充...
通过`Graphics2D`对象,你可以绘制各种几何形状(如矩形、椭圆、线条)、路径、文本和图像。 2. `Shape` 接口:表示抽象的几何形状,包括闭合路径、线段等。常见的实现有`Rectangle2D`、`Ellipse2D`和`GeneralPath`...
- **绘制形状**:调用Graphics2D对象的方法,如draw()、fill()等来绘制形状。 - **文本渲染**:使用`Graphics2D.drawString()`方法在指定位置绘制文本,支持多语言和复杂的字体排版。 - **图片处理**:可以加载、...
`java.awt`包提供了基本的图形绘制类和接口,如`Graphics2D`,而`javax.swing`包则包含了用于创建GUI的组件,如`JFrame`。 创建一个简单的图形窗口,我们可以使用`JFrame`和`Canvas`。`Canvas`是用于绘制图形的基本...
Java画虚线与实线,部分代码如下:super("实线与虚线"); //调用父类构造函数 setSize(300,200); //设置窗口尺寸 setVisible(true); //设置窗口可视 setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE); //关闭...
### Java 2D Graphics 关键知识点解析 #### 一、Java 2D 概述 **Java 2D** 是 Java 平台的一个组件,它提供了丰富的 2D 图形和图像处理功能。通过 Java 2D API,开发人员可以轻松地在 Java 应用程序中实现高质量的...
在Java编程语言中,画带箭头的线是一项常见的图形绘制任务,主要应用于GUI(图形用户界面)开发或图表绘制。Java提供了丰富的图形库来支持这样的功能,其中最常用的是Java AWT(Abstract Window Toolkit)和Swing库...
通过Graphics2D对象,我们可以进行各种绘制操作,如设置颜色、线型、填充模式等。 要绘制直线,我们首先需要创建一个Graphics2D对象。在Java GUI应用程序中,通常在paintComponent()方法中创建并使用这个对象。例如...
1. **Graphics2D**:这是Java 2D的主要绘图类,继承自Graphics。它提供了更高级别的绘图功能,如直线、曲线、矩形、圆形等,并支持复杂的变换、抗锯齿、颜色混合等特性。 2. **Shape**:表示2D几何形状,如Line2D、...
画笔用于图形边框,同样可以设置颜色、宽度、样式(实线、虚线、点线等)。 4. **字体与文本**:Qt支持多种字体和文本格式,可以通过QFont对象进行设置,包括字体名称、大小、风格(粗体、斜体等)。QPainter::...
"GUI.zip.rar_按键画线_虚线点画线"这个标题暗示了一个项目或程序,它允许用户通过GUI来绘制图形,特别是利用按键操作来控制线条的样式,如实线、虚线和点画线,并可能包括改变线条颜色的功能。 首先,我们来讨论...
Go的另一个2D图形包尽管图像功能与我将要制作的功能一样完整,但仍处于开发阶段。 顶级的“路径”和“形状”类型是完整的,并且已实现大多数PathProcessor,包括: StrokeProc-具有多种上限和联接类型的固定宽度的...
Java绘制图形和线段,绘制2D图形、设置绘制线条的颜色,用新的画刷绘制虚线,可以绘制实线和曲线,绘制颜色为白色,一个JAVA图形绘图的实例程序,以下代码仅供参考: public LineDemo(){ super("实线与虚线"); ...
在这个方法中,我们将使用Core Graphics框架来绘制虚线。Core Graphics是苹果平台的一个低级2D绘图框架,支持多种图形操作,包括直线、曲线、填充和描边等。 ```swift override func draw(_ rect: CGRect) { guard...
这个"CGContext 2D画图 demo"是为初学者设计的,旨在教授如何利用CGContext进行基本的2D图形绘制。在这个教程中,我们将深入探讨CGContext的核心概念、方法以及如何使用它来实现虚线、贝塞尔曲线和画图片。 首先,...
"Simple 2D Graphics Library for C" 是一个专为C语言设计的库,它使得在C编程环境中创建和处理二维图形变得更为简单。这个库可能是为开发者提供了一系列的函数和结构,以支持基本的绘图操作,如绘制线段、矩形、...
在重写paint方法时,需要将传入的Graphics对象转换为Graphics2D,例如`Graphics2D graphics2d = (Graphics2D)g;`,然后就可以使用Graphics2D的方法进行复杂的2D绘图。 4. **BasicStroke类**: BasicStroke用于定义...