本来想在JPanel上画图,然后保存为图片,但是发现如果循环创建JPanel保存图片太快,图片容易重叠出错,解决办法就是在JLabel上画图,代码如下:
import javax.swing.*;
import javax.imageio.ImageIO;
import java.awt.*;
import java.awt.image.BufferedImage;
import java.io.File;
import java.io.IOException;
/**
* Created by IntelliJ IDEA.
* User: Administrator
* Date: 2009-6-18
* Time: 16:16:45
* To change this template use File | Settings | File Templates.
*/
public class TestJLabel2Image {
public static void main(String ds[]) {
final String[] columnNames = {"0", "1", "2", "3", "4", "5", "6", "7", "8", "9"};
final int[] columnValues = {3, 7, 2, 1, 0, 9, 4, 6, 5, 7};
final int colorType = 1;
int image_width = 180;
int image_height = 180;
final int table_width = 150;
final int word_width = 20;
final int word_height = 15;
final int line_width = 10;
final int line_height = 5;
final JFrame f = new JFrame();
JPanel panel = new JPanel(new BorderLayout());
JLabel label = new JLabel() {
public void paintComponent(Graphics g) {
int x = 0;
int y = 0;
for (int i = 0; i < columnNames.length; i++) {
String s = columnNames[i];
int count = columnValues[i];
y = y + word_height;
g.drawString(s, x, y);
if (count != 0) {
int lineLength = 0;
if (count > 25) {
lineLength = line_width * 25;
} else {
lineLength = line_width * count;
}
if (colorType == 1) {
g.setColor(Color.RED);
} else {
g.setColor(Color.BLUE);
}
g.fillRect(x + word_width, y - 5, lineLength, line_height);
g.setColor(Color.BLACK);
g.drawString(String.valueOf(count), x + word_width + lineLength + 5, y);
} else {
//g.drawString(String.valueOf(count), x + word_width, y);
}
}
g.dispose();
}
};
panel.setPreferredSize(new Dimension(table_width, image_height));
panel.add(label, BorderLayout.CENTER);
f.getContentPane().add(panel);
f.setSize(table_width, image_height);
//f.setVisible(true);
f.pack();
BufferedImage image = createImage(panel);
f.dispose();
//对图片进行压缩处理,输出到指定目录
reduceImg(image, "d:/test.png", image_width, image_height);
}
public static BufferedImage createImage(JPanel panel) {
int totalWidth = panel.getPreferredSize().width;
int totalHeight = panel.getPreferredSize().height;
BufferedImage panelImage = new BufferedImage(totalWidth, totalHeight, BufferedImage.TYPE_INT_RGB);
Graphics2D g2D = (Graphics2D) panelImage.createGraphics();
g2D.setColor(Color.WHITE);
g2D.fillRect(0, 0, totalWidth, totalHeight);
g2D.translate(0, 0);
panel.paint(g2D);
g2D.dispose();
return panelImage;
}
public static void reduceImg(BufferedImage bufferedImage, String imgdist, int widthdist,
int heightdist) {
try {
BufferedImage tag = new BufferedImage(widthdist,
heightdist, BufferedImage.TYPE_INT_RGB);
/*
* Image.SCALE_SMOOTH 的缩略算法 生成缩略图片的平滑度的
* 优先级比速度高 生成的图片质量比较好 但速度慢
*/
tag.getGraphics().drawImage(
bufferedImage.getScaledInstance(widthdist, heightdist,
Image.SCALE_SMOOTH), 0, 0, null);
ImageIO.write(tag, "png", new File(imgdist));
} catch (IOException e) {
e.printStackTrace();
}
}
}
和我另一篇JTable to Image代码基本一致,希望对大家有帮助
http://www.iteye.com/topic/386716
分享到:
相关推荐
最后,如果需要保存缩放后的图像,可以使用`ImageIO.write()`方法: ```java File outputFile = new File("scaled_image.jpg"); ImageIO.write(scaledImage, "jpg", outputFile); ``` 在实际项目中,如描述中所...
读取的图片数据最终可能需要保存在服务器的硬盘上。Java的`FileOutputStream`类可用于写入文件,`ImageIO.write()`方法可将`BufferedImage`对象写入指定格式的文件。 以上就是关于“上传图片并将图片显示出来”这...
2. 图片处理:可能使用了`javax.imageio`包中的类,如`ImageIO`,读取、显示和保存图片。 3. 图形用户界面(GUI):NetBeans提供了丰富的组件库,如`JFrame`, `JButton`, `JLabel`等,用于构建图形界面,用户可以...
在图片浏览器中,每张图片都会被封装为一个ImageIcon对象,然后显示在JLabel或其他组件上。 7. XML存储浏览记录:项目使用XML作为数据存储格式,XML是一种结构化的数据交换格式,易于解析和编写。这可能是为了记录...
这个小巧的程序只有几百KB,具有保存浏览历史的功能,允许用户在已浏览过的图片之间方便地切换,通过点击按钮选择上一张或下一张图片。 首先,我们来深入了解Java Swing的核心组件和原理: 1. **组件(Components...
在Java Swing中,我们可以使用`JFrame`作为应用程序的主要窗口,`JButton`作为用户交互的按钮,以及其他组件如`JLabel`来显示图片或信息。 OpenCV则是一个强大的开源计算机视觉库,它包含大量用于图像处理和计算机...
- 用户点击:通过监听JButton等组件的ActionListener,可以响应用户的点击事件,例如打开新的图片、上一张/下一张切换、保存图片等。 - 鼠标滚动:为了实现图片的滚动浏览,需要监听JScrollPane的MouseWheelEvent,...
在图片管理器中,你可以看到JFrame(主窗口)、JButton(按钮)、JLabel(显示图片)、JFileChooser(文件选择对话框)等组件的应用。 2. **文件I/O操作**: Java的java.io包提供了处理输入和输出的各种类。在这个...
通过ImageIO.read()方法可以从文件中加载图片,并将其转换为BufferedImage对象,然后设置到JLabel上进行显示。 4. **事件监听**:为了实现添加、删除图片的功能,需要添加ActionListener到按钮上。当用户点击按钮时...
客户端通过POST请求将图片数据发送到服务器,服务器接收到数据后保存到磁盘或数据库。 6. **安全性考虑** 在处理用户上传的图片时,必须考虑到安全问题。例如,防止上传恶意文件、限制文件大小和类型、防止文件...
#### 二、使用Java保存图片至Oracle数据库 接下来,我们来看一下如何使用Java代码将图片保存到Oracle数据库中: 1. **加载图片文件**:首先通过`FileInputStream`类读取本地磁盘上的图片文件。 2. **注册Oracle...
除了基本的图片展示,还可以增加其他功能,如缩放、旋转、保存图片等。这些功能可以通过添加菜单项或快捷键实现,并相应地编写处理这些操作的代码。 10. **调试与测试** 在开发过程中,确保进行充分的测试以验证...
在这个项目中,IO类如FileInputStream和FileOutputStream可能被用来读取和保存图片,而BufferedInputStream和BufferedImage则可能用于提高读取效率并处理图像数据。 4. **Swing库**:Swing是Java的图形用户界面...
6. **显示图片**:最后,将Image对象绘制到Java Swing或JavaFX的组件上,如JLabel或ImageView。这通常涉及设置组件的Icon属性或者直接在组件的 paint 方法中绘制。 在Eclipse中,你可以创建一个新的Java项目,并...
3. **图像加载和显示**:使用`ImageIO`类的`read()`方法可以从文件中读取图像,并将其转换为`BufferedImage`对象,然后通过`ImageIcon`显示在`JLabel`上。 4. **鼠标监听器**:为了实现拖动选择区域,我们需要添加...
在Java编程中,图片旋转是一项常见的图像处理任务,尤其在开发图形用户界面(GUI)应用时,例如照片...在实际项目中,你可以根据需求进行扩展,例如添加保存旋转后图片的功能,或者支持多种旋转方式,如镜像翻转等。
最后,别忘了保存修改后的图片。使用ImageIO的write方法,将带有文字的BufferedImage写入文件: ```java File output = new File("output.jpg"); ImageIO.write(image, "jpg", output); ``` 以上就是完成这个课题...
4. Java AWT或Swing:在Java中,我们可以使用JFrame和 JLabel组件来显示图片,但Java本身并不支持TIFF格式,可能需要额外的库,如TwelveMonkeys或Java Advanced Imaging (JAI)。 以上代码展示了如何在不同编程环境...
要在GUI中显示图片,可以创建一个` JLabel`,然后设置其`Icon`属性为`ImageIcon`,如下所示: ```java JLabel label = new JLabel(new ImageIcon(image)); ``` 然后将`JLabel`添加到容器中即可。 3. **图像...