`

JAVA绘制填充多边形输出文字保存成图片的示例

阅读更多
  今天处理一个奇怪的需求,B/S系统中,网页中显示顶点位置可变的五边形,想了想,好像一般的JS图表软件实现不了。只好借助JAVA在服务器端生成。当年的数学基础忘得差不多了,试了好半天,才把这个简单的函数写好。
  整个函数可能对很多人没有太大意义,但其中的设置背景、设置半透明、绘制多边形、填充多边形、设置字体、输出文字、生成图片等代码有一定的借鉴意义。
   /**
     * 生成五边形用的函数
     * @param dstImg,输出图片文件名称
     * @param v1,有效值为0-4
     * @param v2,有效值为0-4
     * @param v3,有效值为0-4
     * @param v4,有效值为0-4
     * @param v5,有效值为0-4
     * 作者:wallimn<br/>
     * 时间:2015-3-28<br/>
     * 联系:54871876@qq.com<br/>
     */
    public final static void pressFive(String dstImg,int v1,int v2,int v3,int v4,int v5) {
    	try {
    		int picWidth=600,picHeight=600;
    		BufferedImage bufferedImage = new BufferedImage(picWidth, picHeight, BufferedImage.TYPE_INT_RGB);
    		Graphics2D g = bufferedImage.createGraphics();
    		g.setComposite(AlphaComposite.getInstance(AlphaComposite.SRC_ATOP, 1.0f));
    		
    		//填充背景
    		g.setColor(new Color(255,255,255));
    		g.fillRect(0, 0, picWidth, picHeight);
    		int min = 90,deta=20,mark=50;
    		int [][]p1 = new int[5][2];    		
    		for(int i=0; i<5; i++){
    			p1[i][0]=picWidth/2;
    			p1[i][1]=picHeight/2-min-deta*i;
    		}
    		
    		int [][]px = new int[5][5];  //一维:五个角中的那个角,二维:从里到外0-4
    		int [][]py = new int[5][5];  
    		double angle=0.0;
    		//计算五个五边形的顶点。
    		for(int i=0; i<5; i++){
    			angle = 72*Math.PI*i/180;
    			for(int j=0; j<5; j++){
    				px[i][j]=(int) Math.round(picWidth/2+(min+deta*j)*Math.sin(angle));
    				py[i][j]=(int) Math.round(picHeight/2-(min+deta*j)*Math.cos(angle));
    			}
    		}
    		//绘制五个五边形
    		g.setColor(new Color(128,128,128));
    		for(int i=0; i<5; i++){
    			g.drawPolygon(new int[]{px[0][i],px[1][i],px[2][i],px[3][i],px[4][i]},
    				new int[]{py[0][i],py[1][i],py[2][i],py[3][i],py[4][i]}, 5);
    		}
    		
    		//绘制根据指定的顶点序号,绘制五边形
    		g.setColor(new Color(0,204,255));
    		g.setComposite(AlphaComposite.getInstance(AlphaComposite.SRC_ATOP, 0.5f));
    		g.fillPolygon(new int[]{px[0][v1],px[1][v2],px[2][v3],px[3][v4],px[4][v5]}, 
    				new int[]{py[0][v1],py[1][v2],py[2][v3],py[3][v4],py[4][v5]}, 5);

    		//输出文字
    		g.setColor(new Color(16,16,16));
    		int fontsize=12;
    		g.setFont(new Font("黑体",Font.PLAIN,fontsize));
    		String [] text = {"金","木","水","火","土"};
            g.drawString(text[0]+"/"+(v1)*mark, px[0][4],py[0][4]-fontsize);
            g.drawString(text[1]+"/"+(v2)*mark, px[1][4],py[1][4]);
            g.drawString(text[2]+"/"+(v3)*mark, px[2][4],py[2][4]+fontsize);
            g.drawString(text[3]+"/"+(v4)*mark, px[3][4]-fontsize*7,py[3][4]);
            g.drawString(text[4]+"/"+(v5)*mark, px[4][4]-fontsize*7,py[4][4]);
    		
    		g.dispose();
    		//保存图片
    		ImageIO.write(bufferedImage, PICTRUE_FORMATE_JPG, new File(dstImg));
    	} catch (IOException e) {
    		e.printStackTrace();
    	}
    }


生成的图形如下图所示:


  • 大小: 19.9 KB
分享到:
评论
1 楼 xm_666 2018-02-24  
谢谢,可以参考一下

相关推荐

    绘制并填充自定义多边形:无限顶点数与示例效果

    4. **填充多边形:** 应用边缘填充算法来填充绘制完成的多边形,确保填充效果均匀且美观。 **技术要求:** - 多边形的顶点数量应无上限,允许用户根据需要添加任意数量的顶点。 - 程序应支持在绘制过程中通过Shift...

    QT实现多边形填充算法

    4. **绘制填充**:遍历屏幕上的每一个像素,对每个像素执行步骤3中的判断。如果像素在多边形内,则在该位置绘制颜色,以填充多边形。 5. **使用`QPainter`绘制**:在`QPainter`对象上使用`drawPolygon()`方法绘制...

    java绘制复杂图形并输出图片

    在这个项目"java绘制复杂图形并输出图片"中,可能包含了一个名为`capMainboard`的子文件或类,这可能是一个主程序或关键组件,用于组织和执行图形绘制以及图片输出的逻辑。通过分析和运行这个`capMainboard`,我们...

    C++ 多边形边缘填充算法

    在提供的压缩包文件"案例7-多边形边缘填充算法"中,很可能会包含一个示例程序,演示了如何用C++实现上述的一种或多种填充算法。通过分析和学习这个示例,开发者可以更好地理解和掌握如何在实际项目中应用这些技术。...

    多边形图片随多边形大小进行填充

    在计算机图形学中,"多边形图片随多边形大小进行填充"是一个常见的应用场景,尤其是在游戏开发、UI设计和视觉艺术中。这个主题涉及到图像处理、图形渲染以及多边形变换等多个知识点。 首先,我们要理解多边形的概念...

    绘制规则多边形

    本示例聚焦于“绘制规则多边形”这一主题,利用SuperMap iClient 6R for JavaScript,我们可以创建并展示出各种几何形状,如矩形、正方形、圆形以及具有固定边数的多边形等。 SuperMap iClient 6R是SuperMap公司...

    不同方式的多边形填充.rar_填充多边形_多边形_多边形填充

    在计算机图形学中,多边形填充是一种基本的技术,用于在屏幕上绘制闭合多边形的内部区域。这种技术广泛应用于2D图形渲染、游戏开发、CAD设计等多个领域。本资料包“不同方式的多边形填充.rar”显然是关于探讨多边形...

    用mfc编写活性边表填充多边形

    在计算机图形学中,填充多边形是一种常见的任务,它涉及到如何有效地在屏幕上描绘出一个闭合图形的内部。在MFC(Microsoft Foundation Classes)框架下实现这一功能,我们可以利用数据结构和算法来提高效率。本文将...

    扫描线法填充多边形(完整C++代码)(QT工程)

    本项目利用C++编程语言和QT库实现了一个扫描线填充多边形的示例。下面将详细阐述相关知识点。 首先,我们来看“扫描线法”。扫描线法是一种基于水平线(扫描线)来填充多边形的算法,其基本思想是将屏幕上的每一条...

    计算机图形学(MFC)-多边形平滑填充(颜色渐变效果进行填充)

    资源文件“多边形平滑填充(颜色过渡三角形)”可能包含了实现上述逻辑的代码示例,包括获取顶点、三角化、颜色插值和像素绘制等步骤。通过分析和学习这个代码,开发者可以更好地理解和实现多边形平滑填充的效果。 ...

    C++多边形有效边填充算法

    最后,根据有效边规则,我们在屏幕上绘制像素来填充多边形。 4. **数据结构和算法**: 为了高效地处理边,我们可以使用优先队列(例如,C++中的`std::priority_queue`)来存储按Y坐标排序的边。每次处理新的扫描线...

    Bresenham画线连成多边形并填充

    在MFC中,实现扫描线填充多边形的过程如下: 1. 首先,使用Bresenham算法绘制出多边形的边界。 2. 接着,确定多边形的最小y坐标和最大y坐标,作为填充的扫描线范围。 3. 对于每一行y坐标,找到与之相交的边界的x坐标...

    多边形填充

    Bresenham算法是用于绘制直线的常用方法,它在填充多边形边界时起着关键作用。通过确定像素是应该在当前线段的左边还是右边来决定是否被填充。这个算法是基于错误修正的概念,通过逐步接近理想直线来确定像素的采样...

    多边形填充 计算机图形学 程序代码

    在填充多边形时,通常会采用扫描线算法,即从上到下遍历每一行,检查每条扫描线与多边形边缘的交点,根据这些交点将颜色填充到相应像素。由于代码中并未完整展示扫描线填充算法,可以推断 `create_edgetable` 函数的...

    区域填充算法(多边形的填充)

    在实际应用中,我们常常通过鼠标来绘制多边形,并选择一种颜色进行填充。 区域填充算法的基本思想是通过找到边界像素,然后沿着边界向内部像素扩展,直到填满整个多边形。这个过程通常涉及到两个关键步骤:边界检测...

    凹多边形填充 C代码

    ### 四、填充多边形 #### 4.1 设置填充样式 使用`setfillstyle`函数设置填充模式和填充颜色。这里的填充模式为6(即交叉线填充),填充颜色为黄色。 ```c setfillstyle(6, YELLOW); ``` #### 4.2 执行填充 使用`...

    C#018绘制多边形

    如果需要填充多边形内部,可以使用`FillPolygon`方法,它接受一个Brush对象来定义填充颜色: ```csharp SolidBrush fillBrush = new SolidBrush(Color.Blue); g.FillPolygon(fillBrush, polygonPoints); ``` 对于...

    Java中多边形绘制.pdf

    `Graphics` 类有两个关键方法,`drawPolygon()` 用于绘制边框型多边形,而 `fillPolygon()` 则用于填充多边形内部。这两个方法都有两种不同的参数类型。 - 第一种参数类型: 这种方式需要传入三个参数:一个整型...

    基于win32GDI的扫描线填充多边形的实现

    在计算机图形学中,填充多边形是一种基本的渲染技术,尤其在2D图形界面中广泛应用。本主题将深入探讨如何使用Windows图形设备接口(GDI)中的win32 API来实现扫描线填充多边形的方法。扫描线填充算法是解决这一问题...

Global site tag (gtag.js) - Google Analytics