简体   繁体   English

如何在不使用文件选择器的情况下将 jlabel 中的图像图标转换为字节

[英]How to convert image icon in jlabel to byte without using filechooser

I'm just new at java development, i can insert image into database by using file chooser and then convert to byte,the problem is i want to save a default image into database without using file chooser.I set the label with a specific image through properties.Can i convert the default image i set to label?我只是 Java 开发新手,我可以使用文件选择器将图像插入数据库然后转换为字节,问题是我想在不使用文件选择器的情况下将默认图像保存到数据库中。我使用特定图像设置标签通过属性。我可以转换我设置为标签的默认图像吗?

any help will be appreciated.任何帮助将不胜感激。

Yes, it's possible.是的,这是可能的。 You need to convert the Icon from the JLabel to BufferedImage , from there you can simply pass it through the ImageIO API to get a byte[] array您需要将IconJLabel转换为BufferedImage ,从那里您可以简单地通过ImageIO API 传递它以获取byte[]数组

Icon icon = null;
BufferedImage img = new BufferedImage(icon.getIconWidth(), icon.getIconHeight(), BufferedImage.TYPE_INT_ARGB);
Graphics2D g2d = img.createGraphics();
icon.paintIcon(null, g2d, 0, 0);
g2d.dispose();

try (ByteArrayOutputStream baos = new ByteArrayOutputStream()) {
    ImageOutputStream ios = ImageIO.createImageOutputStream(baos);
    try {
        ImageIO.write(img, "png", ios);
        // Set a flag to indicate that the write was successful
    } finally {
        ios.close();
    }
    byte[] bytes = baos.toByteArray();
} catch (IOException ex) {
    ex.printStackTrace();
}

my project part code:我的项目部分代码:

..........
BufferedImage bfi = getBufferedImage(iconToImage(my_Jlabel.getIcon()));                   
ByteArrayOutputStream bs = new ByteArrayOutputStream();
ImageIO.write(bfi, "png", bs);
byte[] byteArray = bs.toByteArray();
pstmt.setBytes(17, byteArray);
.............

 public static BufferedImage getBufferedImage(Image img){
if (img instanceof BufferedImage)
{
   return (BufferedImage) img;
}


BufferedImage bimage = new BufferedImage(img.getWidth(null), 
                img.getHeight(null), BufferedImage.TYPE_INT_ARGB);


Graphics2D bGr = bimage.createGraphics();
bGr.drawImage(img, 0, 0, null);
bGr.dispose();

return bimage;
} 


static Image iconToImage(Icon icon) {    
if (icon instanceof ImageIcon) {
return ((ImageIcon)icon).getImage();
} 
else {
int w = icon.getIconWidth();
int h = icon.getIconHeight();
GraphicsEnvironment ge = 
    GraphicsEnvironment.getLocalGraphicsEnvironment();
  GraphicsDevice gd = ge.getDefaultScreenDevice();
  GraphicsConfiguration gc = gd.getDefaultConfiguration();
  BufferedImage image = gc.createCompatibleImage(w, h);
  Graphics2D g = image.createGraphics();
  icon.paintIcon(null, g, 0, 0);
  g.dispose();
  return image;
}
}     

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM