当前位置: 首页 > 知识库问答 >
问题:

将imageIcon导出为缓冲映像

蒙峰
2023-03-14

下面的java代码现在在标签和按钮中显示一个imageIcon。按下按钮时,它会绘制缓冲图像并导出该图像。导出的图像与图像图标中的图像无关。

我不想绘制图像,而是希望像绘制和导出图像一样导出ImageIcon中的图像。因此,我认为图像图标中的图像必须转换为缓冲图像,然后导出为400宽和400高的图像。

import java.awt.*;
import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;
import java.io.IOException;
import java.awt.Color;
import java.awt.Graphics2D;
import java.awt.image.BufferedImage;
import java.io.File;
import java.io.IOException;

import javax.imageio.ImageIO;

import javax.swing.*;  

public class second {  
JFrame f;  
second() throws IOException{ 

//use paintCompent 


    f=new JFrame();  
    JButton b1 = new JButton("Action Listener");

    JLabel b2=new JLabel("");;  


    b2.setIcon(new ImageIcon(new ImageIcon("/Users/johnzalubski/Desktop/javaCode/cd.jpg").getImage().getScaledInstance(400, 400, Image.SCALE_DEFAULT)));





    f.add(b1,BorderLayout.NORTH);  
    f.add(b2,BorderLayout.CENTER);  



    b1.addActionListener(new ActionListener() {

        public void actionPerformed(ActionEvent e) {
            int width = 300;
            int height = 300;


            BufferedImage  buffIMg = new BufferedImage(width, height, BufferedImage.TYPE_INT_RGB);

            Graphics2D g2d = buffIMg.createGraphics();

            g2d.setColor(Color.white);
            g2d.fillRect(0, 0, width, height);
            g2d.setColor(Color.black);
            g2d.fillOval(0,0,width,height);
            g2d.setColor(Color.orange);
            g2d.drawString("Jessica ALba:", 55, 111);


            g2d.dispose();


            File file = new File("aa.png");

            try {
                ImageIO.write(buffIMg, "png",file);
            } catch (IOException e1) {
                // TODO Auto-generated catch block
                e1.printStackTrace();
            }
        }
    });


    f.setSize(400,400);  
    f.setVisible(true);  
}  
    public static void main(String[] args) throws IOException {  
    new second();  


    }  



}  

共有1个答案

孟茂学
2023-03-14

BufferedImage unscaledButtonImage;
try {
    unscaledButtonImage = ImageIO.read(
        new File("/Users/johnzalubski/Desktop/javaCode/cd.jpg"));
} catch (IOException e) {
    throw new RuntimeException(e);
}

要缩放它,使用缩放Graphics.drawImage方法

BufferedImage scaledButtonImage =
    new BufferedImage(400, 400, unscaledButtonImage.getType());
Graphics g = scaledButtonImage.createGraphics();
g.drawImage(unscaledButtonImage, 0, 0, 400, 400, null);
g.dispose();

您可以从中轻松制作ImageIcon:

b2.setIcon(new ImageIcon(scaledButtonImage));

但是在那之后你不需要图像图标,因为你有原始的BuffereImage。

 类似资料:
  • 问题内容: 我一直在尝试将a转换为…而且我没有运气。 我有一个预先存在的ImageIcon,对于存在的大量BufferedImage操作,需要将其转换为Buffered Image。 我发现了几种方法,但是所有方法都占用大量CPU。 问题答案: 有什么问题:

  • 我有一个JSON对象,我正在将它转换成一个,并在这里进行一些处理。稍后,我想将相同的缓冲区数据转换为有效的JSON对象。 我的工作节点V6.9.1 下面是我尝试过的代码,但当我转换回JSON并且无法打开此对象时,我得到了。 所以我试着用检查的方式打印整个物体 如果我试着像数组一样读取它 我试图解析它也抛出SynTaxError:意外令牌o在JSON在位置2 我需要像我创建的那样将其视为真实对象(我

  • 在Python脚本中,,我使用协议缓冲区使用以下方法来建模数据: 在. proto文件中定义消息格式。 使用协议缓冲区编译器。 使用Python协议缓冲区API在. py模块中写入和读取消息。 我想在appengine上实现Cloud Endpoints框架,该框架导入,并使用前面提到的Python脚本,但是Cloud Endpoints使用ProtoRPC,而不是“标准”协议缓冲区。 我的App

  • 我正在使用JOGL,但这个问题一般适用于OpenGL。似乎存在类似的问题,但它们要么针对GLSL代码,要么与复制帧缓冲区的内容有关,要么是一般建议-使用帧缓冲区对象,而不是。 我正在做一些阴影映射。如何使用帧缓冲对象将深度通道直接渲染到纹理? 能否请你贴一段初始化纹理和帧缓冲对象的代码,以及渲染场景前初始化一切的代码? 目前,我使用<code>glCopyTexSubImage2D<code>。我

  • 缓冲区溢出的漏洞随着冯·诺依曼 1 构架的出 现就已经开始出现了。 在1988年随着莫里斯互联网蠕虫的广泛传播他们开始声名狼藉。不幸的是, 同样的这种攻击一直持续到今天。 到目前为止,大部分的缓冲区溢出的攻击都是基于摧毁栈的方式。 大部分现代计算机系统使用栈来给进程传递参数并且存储局部变量。 栈是一种在进程映象内存的高地址内的后进先出(LIFO)的缓冲区。 当程序调用一个函数时一个新的“栈帧”会被

  • 问题内容: 我有一个Image对象,我想将其转换为Icon或ImageIcon以添加到JTextPane。我将如何去做呢?(这是在JAVA中) 澄清:我的“图像”是图像对象的实例,而不是文件。 问题答案: 这有什么错?