`
swen00
  • 浏览: 62504 次
  • 性别: Icon_minigender_1
  • 来自: 深圳
社区版块
存档分类
最新评论

JLabel保存为图片

    博客分类:
  • java
阅读更多
本来想在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
分享到:
评论
1 楼 swen00 2009-06-18  
图片压缩代码是借用JE上的

相关推荐

    java 图片的缩放与拉伸

    最后,如果需要保存缩放后的图像,可以使用`ImageIO.write()`方法: ```java File outputFile = new File("scaled_image.jpg"); ImageIO.write(scaledImage, "jpg", outputFile); ``` 在实际项目中,如描述中所...

    上传图片Java详细代码,可以实现,将图片显示出来

    读取的图片数据最终可能需要保存在服务器的硬盘上。Java的`FileOutputStream`类可用于写入文件,`ImageIO.write()`方法可将`BufferedImage`对象写入指定格式的文件。 以上就是关于“上传图片并将图片显示出来”这...

    netbeans下Java编的图片管理系统,打开图片后实现自动播放功能

    2. 图片处理:可能使用了`javax.imageio`包中的类,如`ImageIO`,读取、显示和保存图片。 3. 图形用户界面(GUI):NetBeans提供了丰富的组件库,如`JFrame`, `JButton`, `JLabel`等,用于构建图形界面,用户可以...

    用Swing做的图片浏览器的项目

    在图片浏览器中,每张图片都会被封装为一个ImageIcon对象,然后显示在JLabel或其他组件上。 7. XML存储浏览记录:项目使用XML作为数据存储格式,XML是一种结构化的数据交换格式,易于解析和编写。这可能是为了记录...

    Java Swing做的图片浏览器

    这个小巧的程序只有几百KB,具有保存浏览历史的功能,允许用户在已浏览过的图片之间方便地切换,通过点击按钮选择上一张或下一张图片。 首先,我们来深入了解Java Swing的核心组件和原理: 1. **组件(Components...

    java swing opencv调用摄像头实现拍照及本地保存支持上传FTP路径配置

    在Java Swing中,我们可以使用`JFrame`作为应用程序的主要窗口,`JButton`作为用户交互的按钮,以及其他组件如`JLabel`来显示图片或信息。 OpenCV则是一个强大的开源计算机视觉库,它包含大量用于图像处理和计算机...

    java课程设计(图片浏览器)

    - 用户点击:通过监听JButton等组件的ActionListener,可以响应用户的点击事件,例如打开新的图片、上一张/下一张切换、保存图片等。 - 鼠标滚动:为了实现图片的滚动浏览,需要监听JScrollPane的MouseWheelEvent,...

    java图片管理器(对刚学JAVA的人的提升有帮助)

    在图片管理器中,你可以看到JFrame(主窗口)、JButton(按钮)、JLabel(显示图片)、JFileChooser(文件选择对话框)等组件的应用。 2. **文件I/O操作**: Java的java.io包提供了处理输入和输出的各种类。在这个...

    用java做的图片浏览器

    通过ImageIO.read()方法可以从文件中加载图片,并将其转换为BufferedImage对象,然后设置到JLabel上进行显示。 4. **事件监听**:为了实现添加、删除图片的功能,需要添加ActionListener到按钮上。当用户点击按钮时...

    图片上传预览功能实现-java

    客户端通过POST请求将图片数据发送到服务器,服务器接收到数据后保存到磁盘或数据库。 6. **安全性考虑** 在处理用户上传的图片时,必须考虑到安全问题。例如,防止上传恶意文件、限制文件大小和类型、防止文件...

    从oracle数据库中存取图片

    #### 二、使用Java保存图片至Oracle数据库 接下来,我们来看一下如何使用Java代码将图片保存到Oracle数据库中: 1. **加载图片文件**:首先通过`FileInputStream`类读取本地磁盘上的图片文件。 2. **注册Oracle...

    用java语言写的一个简单的图片查看器

    除了基本的图片展示,还可以增加其他功能,如缩放、旋转、保存图片等。这些功能可以通过添加菜单项或快捷键实现,并相应地编写处理这些操作的代码。 10. **调试与测试** 在开发过程中,确保进行充分的测试以验证...

    仿wiindow的图片浏览器

    在这个项目中,IO类如FileInputStream和FileOutputStream可能被用来读取和保存图片,而BufferedInputStream和BufferedImage则可能用于提高读取效率并处理图像数据。 4. **Swing库**:Swing是Java的图形用户界面...

    在界面上显示Oracle数据库中的图片

    6. **显示图片**:最后,将Image对象绘制到Java Swing或JavaFX的组件上,如JLabel或ImageView。这通常涉及设置组件的Icon属性或者直接在组件的 paint 方法中绘制。 在Eclipse中,你可以创建一个新的Java项目,并...

    java图片剪切

    3. **图像加载和显示**:使用`ImageIO`类的`read()`方法可以从文件中读取图像,并将其转换为`BufferedImage`对象,然后通过`ImageIcon`显示在`JLabel`上。 4. **鼠标监听器**:为了实现拖动选择区域,我们需要添加...

    Java图片旋转_java_

    在Java编程中,图片旋转是一项常见的图像处理任务,尤其在开发图形用户界面(GUI)应用时,例如照片...在实际项目中,你可以根据需求进行扩展,例如添加保存旋转后图片的功能,或者支持多种旋转方式,如镜像翻转等。

    简单的打开图片并生成加字的图片java

    最后,别忘了保存修改后的图片。使用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)。 以上代码展示了如何在不同编程环境...

    Java图片处理

    要在GUI中显示图片,可以创建一个` JLabel`,然后设置其`Icon`属性为`ImageIcon`,如下所示: ```java JLabel label = new JLabel(new ImageIcon(image)); ``` 然后将`JLabel`添加到容器中即可。 3. **图像...

Global site tag (gtag.js) - Google Analytics