Java ——数字图像处理(Java Graphics及其API简介)
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简介)的更多相关文章
- Java数字图像处理基础 - 必读
写了很多篇关于图像处理的文章,没有一篇介绍Java 2D的图像处理API,文章讨论和提及的 API都是基于JDK6的,首先来看Java中如何组织一个图像对象BufferedImage的,如图: 一个B ...
- Java编译器API简介
今天给大家分享的是Java编译器API简介,文章部分内容摘自[优锐课]学习笔记. Java编译器API Java编译器API是Java模块(称为java.compiler)的一部分.该模块包括语言模型 ...
- Java Content Repository API 简介 转自(https://www.ibm.com/developerworks/cn/java/j-jcr/)
Java Content Repository API 简介 1 如果曾经试过开发内容管理应用程序,那么您应当非常清楚在实现内容系统时所遇到的固有难题.这个领地有点支离破碎,许多供应商都有自己的私有仓 ...
- Java基础-正则表达式(Regular Expression)语法规则简介
Java基础-正则表达式(Regular Expression)语法规则简介 作者:尹正杰 版权声明:原创作品,谢绝转载!否则将追究法律责任. 一.正则表达式的概念 正则表达式(Regular Exp ...
- Java对接拼多多开放平台API(加密上云等全流程)
前言 本文为[小小赫下士 blog]原创,搬运请保留本段,或请在醒目位置设置原文地址和原作者. 作者:小小赫下士 原文地址:Java对接拼多多开放平台API(加密上云等全流程) 本文章为企业ERP(I ...
- Atitit.java图片图像处理attilax总结
Atitit.java图片图像处理attilax总结 BufferedImage extends java.awt.Image 获取图像像素点 image.getRGB(i, lineIndex); ...
- 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); ...
- Java SE 6 新特性: 编译器 API
新 API 功能简介 JDK 6 提供了在运行时调用编译器的 API,后面我们将假设把此 API 应用在 JSP 技术中.在传统的 JSP 技术中,服务器处理 JSP 通常需要进行下面 6 个步骤: ...
- Java 9 揭秘(10. 模块API)
Tips 做一个终身学习的人. 在本章节中,主要介绍以下内容: 什么是模块 API 如何在程序中表示模块和模块描述 如何读取程序中的模块描述 如何表示模块的版本 如何使用Module和ModuleDe ...
随机推荐
- 利用雅虎ycsb对cassandra做性能测试
准备: 环境: 两台虚拟机:ip:192.168.138.128/129;配置:2核4G: 版本:apache-cassandra-3.10 ycsb-cassandra-binding-0.1 ...
- Centos 6.4 x86_64 最小化安装后的优化——还需要整理
Centos 6.4 x86_64 最小化安装后的优化 购买了服务器以后要做的第一件事就是安装操作系统了,这里推荐安装 Centos 6.4 x86_64,安装系统时要选择最小化安装(不需要图 ...
- 【leetcode】1144. Decrease Elements To Make Array Zigzag
题目如下: Given an array nums of integers, a move consists of choosing any element and decreasing it by ...
- JS循环结构
什么是循环结构? 反复一遍又一遍做着相同(相似)的事情 循环结构的两大要素? 循环条件:什么时候开始,什么时候结束 循环操作:循环体,循环过程中 做了什么 一.while语句 while语句 属于前测 ...
- PHP文件的上传和下载
1.使用PHP的创始人 Rasmus Lerdorf 写的APC扩展模块来实现(http://pecl.php.net/package/apc) APC实现方法: 安装APC,参照官方文档安装,可以使 ...
- 【Java】使用@Valid+BindingResult进行controller参数校验
@Valid @Valid注解用于校验,所属的包: javax.validation.Valid. 你可以定义实体,在实体的属性上添加校验规则,在API接收数据时添加@Valid注解,这时你的实体将会 ...
- [CERC2016]:凸轮廓线Convex Contour(模拟+数学)
题目描述 一些几何图形整齐地在一个网格图上从左往右排成一列.它们占据了连续的一段横行,每个位置恰好一个几何图形.每个图形是以下的三种之一:$1.$一个恰好充满单个格子的正方形.$2.$一个内切于单个格 ...
- 大数据笔记(九)——Mapreduce的高级特性(B)
二.排序 对象排序 员工数据 Employee.java ----> 作为key2输出 需求:按照部门和薪水升序排列 Employee.java package mr.object; impo ...
- WebRtc 源码下载
项目需要用到WebRtc,记录下基本下载的步骤: 1.下载depot_tools,利用depot_tools 下载WebRtc源码 git clone https://chromium.googles ...
- ContentProvider,ContentResolver和ContentObserver 使用
1 ContentProvider内容提供者 四大组件之一,实现不同程序实现数据的共享.联系人应用就使用了ContentProvider,比如你在自己的应用可以读取和修改联系人的数据(获得相应权限). ...