java画图
前段时间项目里用到了画图,发布到服务器之后,图片处理程序报错:java.lang.IncompatibleClassChangeError:Found class com.sun.image.codec.jpeg.JPEGImageEncoder, but interface was expected
查了下服务器的JRE是用的openjdk,将openjdk换成SUN的标准JDK就可以了。
下面是个画图的简单例子:
import java.awt.Color;
import java.awt.Font;
import java.awt.Graphics2D;
import java.awt.image.BufferedImage;
import java.io.BufferedOutputStream;
import java.io.File;
import java.io.FileNotFoundException;
import java.io.FileOutputStream;
import java.io.IOException;
import com.sun.image.codec.jpeg.JPEGCodec;
import com.sun.image.codec.jpeg.JPEGImageEncoder;
@SuppressWarnings("restriction")
public class Example {
public static void draw(){
/**
* BufferedImage(int width, int height, int imageType)
* 构造一个类型为预定义图像类型之一的 BufferedImage。
*/
BufferedImage bufferedImage = new BufferedImage(500, 300, BufferedImage.TYPE_3BYTE_BGR);
/**
* createGraphics() 创建一个 Graphics2D,可以将它绘制到此 BufferedImage 中。
*/
Graphics2D graphics2d = bufferedImage.createGraphics();
/**
* setBackground(Color color) 设置 Graphics2D 上下文的背景色。
*/
graphics2d.setBackground(Color.WHITE);
/**
* public abstract void clearRect(int x,int y,int width,int height)
* 通过使用当前绘图表面的背景色进行填充来清除指定的矩形。此操作不使用当前绘图模式。
* 从 Java 1.1 开始,离屏图像的背景色可能与系统相关。
* 应用程序应该使用 setColor,然后使用 fillRect,以确保离屏图像被清除为指定颜色。
* 参数:
* x - 要清除矩形的 x 坐标。
* y - 要清除矩形的 y 坐标。
* width - 要清除矩形的宽度。
* height - 要清除矩形的高度。
* */
graphics2d.clearRect(0, 0, 500, 300);
/**
* public abstract void setColor(Color c)
* 将此图形上下文的当前颜色设置为指定颜色。
* 使用此图形上下文的所有后续图形操作均使用这个指定的颜色。
* 参数:
* c - 新的呈现颜色。
* */
graphics2d.setColor(Color.RED);
Font font = new Font("sansserif", Font.PLAIN, 18);
/**
* 将此图形上下文的字体设置为指定字体。
* 使用此图形上下文的所有后续文本操作均使用此字体。忽略 null 参数
*/
graphics2d.setFont(font);
/**
* public abstract void fillRect(int x,int y,int width,int height)
* 填充指定的矩形。该矩形左边缘和右边缘分别位于 x 和 x + width - 1。
* 上边缘和下边缘分别位于 y 和 y + height - 1。
* 得到的矩形覆盖 width 像素宽乘以 height 像素高的区域。
* 使用图形上下文的当前颜色填充该矩形。
* */
graphics2d.fillRect(0, 0, 500, 30);
graphics2d.setColor(Color.WHITE);
graphics2d.drawString("简单的例子", 200, 20);
font = new Font("sansserif", Font.PLAIN, 16);
graphics2d.setFont(font);
graphics2d.setColor(Color.RED);
/**
* public abstract void fillOval(int x,int y,int width,int height)
* 使用当前颜色填充外接指定矩形框的椭圆。
* 参数:
* x - 要填充椭圆的左上角的 x 坐标。
* y - 要填充椭圆的左上角的 y 坐标。
* width - 要填充椭圆的宽度。
* height - 要填充椭圆的高度。
* */
graphics2d.fillOval(20, 40, 20, 20);
graphics2d.setColor(Color.ORANGE);
graphics2d.fillOval(40, 60, 20, 20);
graphics2d.setColor(Color.YELLOW);
graphics2d.fillOval(60, 80, 20, 20);
graphics2d.setColor(Color.GREEN);
graphics2d.fillOval(80, 100, 20, 20);
graphics2d.setColor(Color.CYAN);
graphics2d.fillOval(100, 120, 20, 20);
graphics2d.setColor(Color.BLUE);
graphics2d.fillOval(120, 140, 20, 20);
graphics2d.setColor(Color.MAGENTA);
graphics2d.fillOval(140, 160, 20, 20);
graphics2d.setColor(Color.MAGENTA);
graphics2d.fillOval(340, 160, 20, 20);
graphics2d.setColor(Color.BLUE);
graphics2d.fillOval(360, 140, 20, 20);
graphics2d.setColor(Color.CYAN);
graphics2d.fillOval(380, 120, 20, 20);
graphics2d.setColor(Color.GREEN);
graphics2d.fillOval(400, 100, 20, 20);
graphics2d.setColor(Color.YELLOW);
graphics2d.fillOval(420, 80, 20, 20);
graphics2d.setColor(Color.ORANGE);
graphics2d.fillOval(440, 60, 20, 20);
graphics2d.setColor(Color.RED);
graphics2d.fillOval(460, 40, 20, 20);
/**
* public abstract void drawLine(int x1,int y1,int x2,int y2)
* 在此图形上下文的坐标系中,使用当前颜色在点 (x1, y1) 和 (x2, y2) 之间画一条线。
* 参数:
* x1 - 第一个点的 x 坐标。
* y1 - 第一个点的 y 坐标。
* x2 - 第二个点的 x 坐标。
* y2 - 第二个点的 y 坐标。
* */
graphics2d.setColor(Color.RED);
for(int m=0;m<5;m++){
graphics2d.drawLine(0, 190+m*20, 500, 190+m*20);
}
graphics2d.setColor(Color.RED);
for(int n=0;n<25;n++){
graphics2d.drawLine(0+n*20, 190, 0+n*20, 270);
}
/**
* public abstract void dispose()释放此图形的上下文以及它使用的所有系统资源。
* 调用 dispose 之后,就不能再使用 Graphics 对象。
* Java 程序运行时,可以在一个短时间帧内创建大量的 Graphics 对象。
* 尽管垃圾回收器的终止进程也能够进行相同的系统资源释放,
* 但是最好通过调用此方法来手工释放相关资源,而不是依靠终止进程,
* 因为终止进程需要很长时间才能结束运行。
* 作为组件 paint 和 update 方法的参数提供的 Graphics 对象,
* 在这些方法返回时将被系统自动释放。
* 为了提高效率,仅当所使用的 Graphics 对象
* 是由组件或另一个 Graphics 对象直接创建时,
* 程序员才应在使用完此 Graphics 后调用 dispose。
* */
graphics2d.dispose();
/**
* public void flush()
* 刷新此 Image 对象正在使用的所有可重构的资源。
* 这包括为呈现到屏幕而缓存的所有像素数据,
* 以及用来存储图像数据或像素的所有系统资源(如果可以重新创建它们)。
* 图像被重置为与初始创建时类似的状态,因此如果再次呈现图像,
* 则必须重新创建图像数据或再次从源中获取这些数据。
* 此方法如何影响特定类型的 Image 对象的示例如下:
* BufferedImage 对象不改动存储其像素的主要 Raster,但是刷新有关像素的缓存信息,
* 比如上传到用于加速位图的显示硬件的副本。
* Image 对象由带有 width 和 height 参数的 Component 方法创建,
* 该方法不改动像素的主要缓冲区,但是释放所有缓存的信息,
* 这与对 BufferedImage 对象的操作非常类似。
* VolatileImage 对象释放其所有像素资源,
* 这些资源包括通常存储在缺乏资源的显示硬件上的主要副本。
* 这些对象稍后可以使用其 validate 方法还原。
* 卸载从文件、URL 中加载或由 ImageProducer 生成的 Toolkit
* 和 Component 类创建的 Image 对象,并释放所有本地资源。
* 稍后可在呈现这些对象时根据需要从初始源重新加载它们,就像第一次创建它们时那样。
* */
bufferedImage.flush();
String filepath = "D:/draw.jpeg";
File imgfile = new File(filepath);
FileOutputStream fos;
try{
fos = new FileOutputStream(imgfile);
BufferedOutputStream bos = new BufferedOutputStream(fos);
JPEGImageEncoder encoder = JPEGCodec.createJPEGEncoder(bos);
encoder.encode(bufferedImage);
bos.close();
}catch (FileNotFoundException e){
e.printStackTrace();
}catch (IOException e){
e.printStackTrace();
}
}
public static void main(String[] args) {
draw();
}
}
- 大小: 19.9 KB
分享到:
相关推荐
Java 画图板程序设计与实现 Java 画图板是使用 Java 语言编写的图形绘制程序,提供了基本的绘图功能,如画笔、直线、椭圆、矩形等,用户可以使用该程序绘制简单的图形。下面我们将对 Java 画图板程序进行详细的分析...
通过这个简单的Java画图板项目,初学者可以了解到GUI编程的基本原理,事件监听器的使用,以及如何利用Java的绘图功能来创建动态的用户交互界面。同时,这也是一个良好的起点,可以进一步扩展功能,如添加更多的绘图...
根据提供的文件信息,我们可以总结出以下关于 Java 画图程序的知识点: ### 1. Java AWT 和 Swing 组件 该程序使用了 Java 的 AWT(Abstract Window Toolkit)和 Swing 库来创建图形用户界面(GUI)。AWT 是 Java ...
【Java画图板系统】是一个基于Java编程语言开发的图形用户界面(GUI)应用程序,它允许用户在屏幕上绘制图形和图像。这个系统可能是为教育、设计或者简单的绘图练习而设计的,它提供了基本的绘图工具,如选择颜色、...
Java画图程序是一种基于Java编程语言开发的图形用户界面(GUI)应用,它允许程序员创建和展示各种图形。在这个特定的“java画图程序(附源码).rar”压缩包中,包含了实现画图功能的源代码,使得学习者或开发者能够...
Java画图工具源代码分析 Java作为一种面向对象的编程语言,具有丰富的图形用户界面(GUI)库,使得开发画图工具变得相对简单。本篇将深入解析标题为"java画图工具的源代码"的项目,它展示了如何利用Java语言构建一...
【Java画图板小程序详解】 Java画图板小程序是一个基于Java编程语言开发的图形用户界面应用,它提供了丰富的绘图功能,如移动、复制和换色等,旨在为用户提供一个简单而直观的创作平台。这个程序的设计采用了MVC...
Java画图板程序设计是一个涉及图形用户界面(GUI)开发、事件处理、图形绘制等多个方面的IT技术实践。在Java中,我们可以使用内置的Java AWT(Abstract Window Toolkit)和Swing库来创建这样的程序。下面将详细阐述这...
标签“java画图程序”,“java画图”,“画图”,“画图_java”进一步强调了主题,这些都是与Java图形编程相关的关键词。 在压缩包的文件列表中,“www.pudn.com.txt”可能是一个链接或者说明文件,来自pudn.com...
Java画图程序是一种基于Java编程语言开发的图形用户界面(GUI)应用,它允许程序员创建、编辑和保存各种图形,包括直线、矩形和圆等基本形状。在Java中实现这样的功能,主要依赖于Java的AWT(Abstract Window ...
Java画图板程序是一种利用Java编程语言开发的图形用户界面应用,主要目的是提供一个平台让用户可以进行简单的绘图操作。这个程序的特点是功能全面且代码实现简洁,对于初学者来说,是一个很好的学习和实践项目。 ...
java画图工具(draw) 有源代码 可以画多种图形
Java画图程序 本文档将对Java画图程序进行详细的解释,涵盖了三角形、线、圆、矩形等图形的绘制。 图形类的设计 在Java画图程序中,所有图形类都继承自抽象类`Shape`。抽象类`Shape`定义了抽象方法`draw(Graphics...
Java画图板是一种基于Java语言实现的图形用户界面(GUI)工具,允许用户在屏幕上绘制图形和图像。在Java中,我们通常使用Java AWT(Abstract Window Toolkit)或Swing库来创建这样的画图应用程序。这两个库都是Java ...
标题中的"pb.rar_java 画图板_java画图_pb 画图_图形学_画图 java"表明这是一个关于Java编程的项目,特别是涉及到图形绘制功能的实现。"pb.rar"可能是一个压缩文件,包含了实现画图功能的Java源代码和其他相关资源。...
Java画图板应用是一种基于Java编程语言开发的图形用户界面(GUI)程序,它提供了类似Windows操作系统内置画图板的功能。这个程序的核心是利用Java的Swing或JavaFX库来构建用户界面,允许用户进行基本的绘图操作,如...
总结来说,创建一个Java画图程序涉及以下几个核心知识点: 1. Java GUI编程:使用Swing库创建窗口和组件。 2. 绘图API:使用Graphics对象进行图形绘制。 3. 面向对象编程:为不同图形创建类,实现绘制方法。 4. ...
Java画图工具是一种基于Java编程语言开发的图形用户界面(GUI)应用程序,它允许用户进行基本的绘图操作。在Java中实现画图功能主要依赖于Java AWT(Abstract Window Toolkit)和Swing库,这两个库提供了丰富的组件...