`

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  
谢谢,可以参考一下

相关推荐

    python turtle 绘图案例003- 绘制正多边形

    通过使用Python Turtle,您可以探索更多图形绘制和动画效果,如绘制多边形、画圆、填充颜色等。希望这个简单的示例能够帮助您入门Python Turtle绘图。 老师介绍:老师具有五年的教育教学经验 教学特点:适合初学者,...

    openGl多边形填充代码.rar

    用于初学者们学习图形学,使用OpenGL绘制过程。源码无错误有注释代码。学习图形学一定要有耐心,耐心出精品,坚持成大事。

    Android Studio实现小车简单运动动画

    1、参考课堂示例Ex10_1,通过绘制直线、矩形(填充与非填充)、多边形、圆和文本,绘制一个如附图1所示的简易式样的小车(注:图中的标注是各个图元的绘图参数,仅供参考)。 【说明】具体绘图时,小车的颜色、样式...

    python turtle 绘图案例002- 绘制三角形

    通过使用Python Turtle,您可以探索更多图形绘制和动画效果,如绘制多边形、画圆、填充颜色等。希望这个简单的示例能够帮助您入门Python Turtle绘图。 老师介绍:老师具有五年的教育教学经验 教学特点:适合初学者,...

    iOS App开发中用CGContextRef绘制基本图形的基本示例

    主要介绍了iOS App开发中用CGContextRef绘制基本图形的基本示例,CGContextRef同时可以进行图形颜色的填充以及文字的书写,需要的朋友可以参考下

    python turtle 绘图案例009- 绘制摩斯密码

    通过使用Python Turtle,您可以探索更多图形绘制和动画效果,如绘制多边形、画圆、填充颜色等。希望这个简单的示例能够帮助您入门Python Turtle绘图。 老师介绍:老师具有五年的教育教学经验 教学特点:适合初学者,...

    python turtle 绘图案例007- 绘制红十字

    通过使用Python Turtle,您可以探索更多图形绘制和动画效果,如绘制多边形、画圆、填充颜色等。希望这个简单的示例能够帮助您入门Python Turtle绘图。 老师介绍:老师具有五年的教育教学经验 教学特点:适合初学者,...

    python turtle 绘图案例004- 绘制五角星

    通过使用Python Turtle,您可以探索更多图形绘制和动画效果,如绘制多边形、画圆、填充颜色等。希望这个简单的示例能够帮助您入门Python Turtle绘图。 老师介绍:老师具有五年的教育教学经验 教学特点:适合初学者,...

    python turtle 绘图案例006- 绘制数字8与靶子

    通过使用Python Turtle,您可以探索更多图形绘制和动画效果,如绘制多边形、画圆、填充颜色等。希望这个简单的示例能够帮助您入门Python Turtle绘图。 老师介绍:老师具有五年的教育教学经验 教学特点:适合初学者,...

    python turtle 绘图案例001- 绘制正方形和长方形

    通过使用Python Turtle,您可以探索更多图形绘制和动画效果,如绘制多边形、画圆、填充颜色等。希望这个简单的示例能够帮助您入门Python Turtle绘图。 教育背景:知名大学计算机专业毕业 老师介绍:老师具有五年的...

    python turtle 绘图案例008- 绘制四则运算 加减乘除符号

    通过使用Python Turtle,您可以探索更多图形绘制和动画效果,如绘制多边形、画圆、填充颜色等。希望这个简单的示例能够帮助您入门Python Turtle绘图。 老师介绍:老师具有五年的教育教学经验 教学特点:适合初学者,...

    c#入门源代码

    BrushForm2:使用图片填充图形; BrushForm3:使用渐变填充图形。 第9章:【WindowsApp9】有多个实例: Form1:连接环境下的学生成绩登记单处理程序; Form2:学生成绩查询的程序。 第10章:【WindowsApp10】有多...

    module-layout-interview:编写算法将太阳能电池板放置在多边形中

    使用Module Width和Module Height ,用有效的模块填充多边形。 这些都是以米为单位定义的。 实现行间距,以便用户可以将所有模块行分开。 这是相邻行模块之间的米数。 将模块排成一行,因为通常太阳能电池板是成...

    C#二维三维图形绘制工程实例宝典 随书光盘

    2.2.4 多边形 42 2.3 颜色 44 2.4 双倍缓存 66 第3章 坐标系统和颜色变换 69 3.1 坐标系统 69 3.2 颜色变换 77 第二部分 二维图形的基本算法 第4章 二维矩阵和变换 82 4.1 矩阵基础和变换 82 4.2 齐次...

    C语言源代码实例.rar

    136 绘制正多边形 137 正六边形螺旋图案 138 正方形螺旋拼块图案 139 图形法绘制圆 140 递归法绘制三角形图案 141 图形法绘制椭圆 142 抛物样条曲线 143 Mandelbrot分形图案 144 绘制布朗运动曲线 145 艺术...

    Opencv3编程入门配套代码

    16 综合示例程序:图像的载入、显示与输出 3.1.9 17 为程序界面添加滑动条 3.2.1 18 鼠标操作示例 3.3 19 基础图像容器Mat类的使用 4.1.7 20 用OpenCV进行基本绘图 4.3 21 操作图像中像素的方法一:用指针访问像素 ...

    python turtle 绘图案例010- 画爱心

    通过使用Python Turtle,您可以探索更多图形绘制和动画效果,如绘制多边形、画圆、填充颜色等。希望这个简单的示例能够帮助您入门Python Turtle绘图。 老师介绍:老师具有五年的教育教学经验 教学特点:适合初学者,...

    python turtle 绘图案例005- 画彩色的圆和圆点

    通过使用Python Turtle,您可以探索更多图形绘制和动画效果,如绘制多边形、画圆、填充颜色等。希望这个简单的示例能够帮助您入门Python Turtle绘图。 老师介绍:老师具有五年的教育教学经验 教学特点:适合初学者,...

    svg2ass:SVG2ASS-将SVG矢量图形转换为ASS字幕绘制指令

    将SVG矢量图形转换为ASS字幕绘制指令。 概述 SVG2ASS接收SVG文件,并放下ASS对话框行,准备粘贴到例如Aegisub中。 仅支持一组基本的SVG功能,而大多数更高级的功能都将被忽略。 您可以通过将所有对象转换为路径并尽...

    精通Windows.API-函数、接口、编程实例.pdf

    13.2.4 绘制、填充、写入等图形输出操作 384 13.2.5 修剪与坐标变换 385 13.2.6 设备上下文的图形模式 385 13.3 一个最简单的GDI程序 386 13.3.1 示例 386 13.3.2 DC的操作 387 13.3.3 颜色的表示 388...

Global site tag (gtag.js) - Google Analytics