1、创建一个Graphics对象
BufferedImage bi = new BufferedImage(120,120, BufferedImage.TYPE_INT_ARGB);
Graphics2D g2d = bi.createGraphics();
2、控制图形边缘反锯齿
Graphics2D .setRenderingHint(RenderingHints.KEY_ANTIALIASING, RenderingHints.VALUE_ANTIALIAS_ON);
3、线段 / 折线

//两点绘制线段
g2d.drawLine(50,50,200,50);
//多点绘制折线 点(50, 100), 点(100, 130), 点(150, 70), 点(200, 100)
int[] xpoints = new int[]{50,100,150,200};
int[] ypoints = new int[]{100,130,70,100};
int npoints=4;
g2d.drawPolyline(xpoints,ypoints,npoints);
g2d.dispose();
//两点绘制线段(设置线宽为5px): 点(50, 150), 点(200, 150)
BasicStroke bs1 = new BasicStroke(5);
g2d.setStroke(bs1);
g2d.drawLine(50,150,200,150);
//绘制虚线: 将虚线分为若干段( 实线段 和 空白段 都认为是一段), 实线段 和 空白段 交替绘制,
// 绘制的每一段(包括 实线段 和 空白段)的 长度 从 dash 虚线模式数组中取值(从首
// 元素开始循环取值), 下面数组即表示每段长度分别为: 5px, 10px, 5px, 10px, ...
float[] dash = new float[]{5,10};
BasicStroke bs2=new BasicStroke(1,BasicStroke.CAP_SQUARE,BasicStroke.JOIN_MITER,10.0f,dash,0.0f);
g2d.setStroke(bs2);
g2d.drawLine(50,200,200,200);

g2d.dispose();

  4、矩形

// 1. 绘制一个矩形: 起点(30, 20), 宽80, 高100
g2d.drawRect(30,20,80,100);

// 2. 填充一个矩形
g2d.fillRect(30,20,80,100);

// 3. 绘制一个圆角矩形: 起点(30, 150), 宽80, 高100, 圆角宽30, 圆角高30
g2d.drawRoundRect(30,150,80,100,30,30);

// 4. 绘制一个多边形(收尾相连): 点(140, 150), 点(180, 250), 点(220, 200)
int[] xpoints = new int[]{140,180,220};
int[] ypoints = new int[]{150,250,200};
int npoints = 3;
g2d.drawPolygon(xpoints,ypoints,npoints);

g2d.dispose();

  5、圆弧、扇形

// 1. 绘制一条圆弧: 椭圆的外切矩形 左上角坐标为(0, 0), 宽100, 高100,
// 弧的开始角度为0度, 需要绘制的角度数为-90度,
// 椭圆右边水平线为0度, 逆时针为正角度, 顺时针为负角度
g2d.drawArc(0,0,100,100,0,-90);
// 2. 绘制一个圆: 圆的外切矩形 左上角坐标为(120, 20), 宽高为100
g2d.drawArc(120,20,100,100,0,360);
// 3. 填充一个扇形
g2d.fillArc(80, 150, 100, 100, 90, 270);

g2d.dispose();

  6、椭圆

// 1. 绘制一个圆: 圆的外切矩形 左上角坐标为(0, 0), 宽高为100
g2d.drawOval(0,0,100,100);
// 2. 填充一个椭圆
g2d.fillOval(120, 100, 100, 150);
g2d.dispose();

  7、图片

String filepath = "C:/Users/LENOVO/Desktop/demo.jpg";
Image image = Toolkit.getDefaultToolkit().getImage(filepath);
g2d.drawImage(image,50,50,image.getWidth(this),image.getHeight(this),this);

g2d.dispose();

  8、文本

// 设置字体样式, null 表示使用默认字体, Font.PLAIN 为普通样式, 大小为 25px
g2d.setFont(new Font(null,Font.PLAIN,25));

// 绘制文本, 其中坐标参数指的是文本绘制后的 左下角 的位置
// 首次绘制需要初始化字体, 可能需要较耗时
g2d.drawString("Hello world!",20,60);
g2d.drawString("你好,世界!",20,120);

  9、绘制太极图形

private void paintTAiJi(Graphics g){
mf.setTitle("太极");
Graphics2D g2d = (Graphics2D) g.create();

g2d.setRenderingHint(RenderingHints.KEY_ANTIALIASING,RenderingHints.VALUE_ANTIALIAS_ON);

Shape lefthalfCircle = new Ellipse2D.Double(10,10,300,300);
Shape righthalfCircle = new Ellipse2D.Double(10,10,300,300);
Shape innerCircle1 = new Ellipse2D.Double(85,10,150,150);
Shape innerCircle2 = new Ellipse2D.Double(85,160,150,150);

Shape rectangel1 = new Rectangle2D.Double(160,10,150,300);
Shape rectangle2 = new Rectangle2D.Double(10,10,150,300);

Area left = new Area(lefthalfCircle);
Area right = new Area(righthalfCircle);

Area area1 = new Area(rectangel1);
Area area2 = new Area(rectangle2);
//左半圆白色,右半圆黑色
left.subtract(area1);
right.subtract(area2);

Area inner1 = new Area(innerCircle1);
Area inner2 = new Area(innerCircle2);

left.add(inner1);
right.add(inner2);

right.subtract(inner1);
//小白圆
Shape minorWhiteCircle = new Ellipse2D.Double(150,70,20,20);
//小黑圆
Shape minorBalckCircle = new Ellipse2D.Double(150,230,20,20);

//
g2d.setPaint(Color.WHITE);
g2d.fill(left);
g2d.setPaint(Color.black);
g2d.fill(right);

g2d.fill(minorWhiteCircle);
g2d.setPaint(Color.WHITE);
g2d.fill(minorBalckCircle);

}

10、单一颜色填充

private void singleColor(Graphics g){
mf.setTitle("8.画笔颜色设置");
Graphics2D g2d = (Graphics2D) g.create();

g2d.setPaint(Color.blue);

g2d.fillRect(0,0,this.getWidth(),this.getHeight());
}

11、设置渐变色

private void setGradient(Graphics g){
mf.setTitle("9.渐变色填充");
Graphics2D g2d = (Graphics2D) g.create();

Color secondColor = new Color(99,153,255);
//水平方向填充
//GradientPaint hLinePaint = new GradientPaint(0,0,Color.BLACK,this.getWidth(),0,secondColor);
//竖直方向填充
GradientPaint hLinePaint = new GradientPaint(0,0,Color.BLACK,0,this.getHeight(),secondColor);
g2d.setPaint(hLinePaint);

g2d.fillRect(0,0,this.getWidth(),this.getHeight());

}

12、圆周径向渐变颜色填充

private void radialGradientPaint(Graphics g){
mf.setTitle("10.圆周径向渐变颜色填充");
Graphics2D g2d = (Graphics2D) g.create();

float cx = this.getWidth()/2;
float cy = this.getHeight()/2;//(cx,cy为圆心坐标)
float radius = Math.min(cx,cy);//圆半径
float[] fractions = new float[]{0.1f,0.5f,1.0f};//色彩渐变关键帧位置
Color[] colors = new Color[]{Color.red,Color.GREEN,Color.black};//颜色数组
RadialGradientPaint rgp = new RadialGradientPaint(cx,cy,radius,fractions,colors, MultipleGradientPaint.CycleMethod.NO_CYCLE);
g2d.setPaint(rgp);

g2d.fillRect(0,0,this.getWidth(),this.getHeight());
}

												

Java ——数字图像处理(Java Graphics及其API简介)的更多相关文章

  1. Java数字图像处理基础 - 必读

    写了很多篇关于图像处理的文章,没有一篇介绍Java 2D的图像处理API,文章讨论和提及的 API都是基于JDK6的,首先来看Java中如何组织一个图像对象BufferedImage的,如图: 一个B ...

  2. Java编译器API简介

    今天给大家分享的是Java编译器API简介,文章部分内容摘自[优锐课]学习笔记. Java编译器API Java编译器API是Java模块(称为java.compiler)的一部分.该模块包括语言模型 ...

  3. Java Content Repository API 简介 转自(https://www.ibm.com/developerworks/cn/java/j-jcr/)

    Java Content Repository API 简介 1 如果曾经试过开发内容管理应用程序,那么您应当非常清楚在实现内容系统时所遇到的固有难题.这个领地有点支离破碎,许多供应商都有自己的私有仓 ...

  4. Java基础-正则表达式(Regular Expression)语法规则简介

    Java基础-正则表达式(Regular Expression)语法规则简介 作者:尹正杰 版权声明:原创作品,谢绝转载!否则将追究法律责任. 一.正则表达式的概念 正则表达式(Regular Exp ...

  5. Java对接拼多多开放平台API(加密上云等全流程)

    前言 本文为[小小赫下士 blog]原创,搬运请保留本段,或请在醒目位置设置原文地址和原作者. 作者:小小赫下士 原文地址:Java对接拼多多开放平台API(加密上云等全流程) 本文章为企业ERP(I ...

  6. Atitit.java图片图像处理attilax总结

    Atitit.java图片图像处理attilax总结 BufferedImage extends java.awt.Image 获取图像像素点 image.getRGB(i, lineIndex); ...

  7. Atitit.java图片图像处理attilax总结  BufferedImage extends java.awt.Image获取图像像素点image.getRGB(i, lineIndex); 图片剪辑/AtiPlatf_cms/src/com/attilax/img/imgx.javacutImage图片处理titit 判断判断一张图片是否包含另一张小图片 atitit 图片去噪算法的原理与

    Atitit.java图片图像处理attilax总结 BufferedImage extends java.awt.Image 获取图像像素点 image.getRGB(i, lineIndex); ...

  8. Java SE 6 新特性: 编译器 API

    新 API 功能简介 JDK 6 提供了在运行时调用编译器的 API,后面我们将假设把此 API 应用在 JSP 技术中.在传统的 JSP 技术中,服务器处理 JSP 通常需要进行下面 6 个步骤: ...

  9. Java 9 揭秘(10. 模块API)

    Tips 做一个终身学习的人. 在本章节中,主要介绍以下内容: 什么是模块 API 如何在程序中表示模块和模块描述 如何读取程序中的模块描述 如何表示模块的版本 如何使用Module和ModuleDe ...

随机推荐

  1. Dynamic len

    题目 有n个数编号从0→n-1,两种操作: Q L R:询问编号为L→R-1的数中共有多少种不同的数 M X Y:将编号为X的数改为Y 共有m个操作 分析 既然是单点修改,查询,我们考虑一下分块. 首 ...

  2. spring 知识结构

  3. Ubuntu 16.04下使用docker部署rabbitmq

    (以下docker相关的命令,需要在root用户环境下或通过sudo提升权限来进行操作.) 1.拉取rabbimq镜像到本地 docker pull rabbitmq 2. Docker运行rabbi ...

  4. Codeforces Round #351(Div 2)

    熬到半夜打结果前一个小时提交代码的页面根本加载不进去,D题写完还因为小点没判被hack掉了... rating什么的都是身外之物了,于是乎喜闻乐见地又掉回绿名了. A题: *题目描述: Bear看一场 ...

  5. Python_019(六星级别之反射方法)

    1.反射 1)神赐给你的内置函数 : a: getattr(命名空间,'函数名') == 命名空间.属性名; 这里的命名空间指的是对象或者类; b: getattr四个应用场景: 1)类名.名字 &l ...

  6. ubantu apt-get install安装php及开展

    .安装php apt-get install libapache2-mod-php5 php5 报错 E: Package 'libapache2-mod-php5' has no installat ...

  7. CF 696 A Lorenzo Von Matterhorn(二叉树,map)

    原题链接:http://codeforces.com/contest/696/problem/A 原题描述: Lorenzo Von Matterhorn   Barney lives in NYC. ...

  8. Spring Cloud Commons教程(一)普通抽象

    诸如服务发现,负载平衡和断路器之类的模式适用于所有Spring Cloud客户端可以独立于实现(例如通过Eureka或Consul发现)的消耗的共同抽象层. @EnableDiscoveryClien ...

  9. UVALive 6859 Points (凸包)

    Points 题目链接: http://acm.hust.edu.cn/vjudge/contest/130303#problem/E Description http://7xjob4.com1.z ...

  10. 手把手教你搞定个推iOS推送SDK集成

    以下是一位开发者在集成个推iOS推送SDK过程中的真实经历. 作者:Ezreallp 一次偶然的机会,公司的项目要用到推送,我自己本来就很懒,不愿意去弄整套APNS的流程,刚好之前跟朋友聊起过他们的产 ...