Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/397.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java 将ImageIcon转换为BuffereImage(如何设置图像类型)_Java_Bufferedimage_Imageicon - Fatal编程技术网

Java 将ImageIcon转换为BuffereImage(如何设置图像类型)

Java 将ImageIcon转换为BuffereImage(如何设置图像类型),java,bufferedimage,imageicon,Java,Bufferedimage,Imageicon,我正在做的是一个非常简单的图像编辑程序,我有一些问题。我将图像保存在DB中,并将其转换为ImageIcon,以便它可以通过服务器套接字等(可序列化) 因此,通过VO,我将图像图标转换为GUI,并将其转换为缓冲图像,以便我可以编辑它。但是由于我必须设置图像类型,并且有很多不同图像类型的图片(至少看起来是这样),一些图片变成了我不想看到的东西 所以,基本上我是问是否有其他方法将ImageIcon转换为BufferedImage。有些方法可以在不设置单一固定图像类型的情况下对其进行转换。如果没有,我就

我正在做的是一个非常简单的图像编辑程序,我有一些问题。我将图像保存在DB中,并将其转换为
ImageIcon
,以便它可以通过服务器套接字等(可序列化)

因此,通过VO,我将
图像图标
转换为GUI,并将其转换为
缓冲图像
,以便我可以编辑它。但是由于我必须设置图像类型,并且有很多不同图像类型的图片(至少看起来是这样),一些图片变成了我不想看到的东西

所以,基本上我是问是否有其他方法将
ImageIcon
转换为
BufferedImage
。有些方法可以在不设置单一固定图像类型的情况下对其进行转换。如果没有,我就只好放弃那部分了

下面是我代码的一部分:

private class TableSelectEvent extends MouseAdapter {
    @Override
    public void mouseClicked(MouseEvent e) {
        int selectedRow = table.getSelectedRow();
        loadedImageIcon = UserImageReceived.get(selectedRow).getImage();
        originalImage = loadedImageIcon.getImage();

        selectedImageName = UserImageReceived.get(selectedRow).getFileName();
        if (originalImage != null) {
            Image rbi = originalImage.getScaledInstance(lblSelectedImage.getWidth(), lblSelectedImage.getHeight(), Image.SCALE_SMOOTH);
            lblSelectedImage.setIcon(new ImageIcon(rbi));
            bimage = new BufferedImage(originalImage.getWidth(null), originalImage.getHeight(null), BufferedImage.TYPE_INT_ARGB);
            // this, BufferedImage.TYPE_INT_ARGB part is the problem I'm having!
            Graphics2D bgr = bimage.createGraphics();
            bgr.drawImage(originalImage, 0, 0, null);
            bgr.dispose();
        } else {
            System.out.println("originalImage == null");
        }
    }
}

如果不需要透明度,可以使用BuffereImage。键入\u INT\u RGB以解决问题

如果希望具有tranparency,则需要通过以下方式设置将图像副本绘制到目标的方式:

 Graphics2D bgr = bimage.createGraphics();
 bgr.setComposite(AlphaComposite.SRC); // read the doc of this
您遇到的问题可能是,当您创建类型为_INT_ARGB的新BuffereImage时,该图像中的所有像素都是透明的,因此当您将src图像绘制到该图像时,它将与这些transparent像素混合,并且所有图像都是透明的。分辨率是通过设置适当的APLACHAComposite,使用其他模式合并src和dst图像

  • 在数据库中只存储图像链接始终是一种好的做法。但这仍然取决于应用程序的场景,例如,您有一组固定的映像,需要一种简单的备份方法,映像更改非常频繁。Stackoverflow中有很多文章,所以请继续阅读

  • 一个解决办法是 BuffereImage bi=新的BuffereImage(icon.getIconWidth(),icon.getIconHeight(),buffereImage.TYPE_INT_RGB); Graphics g=bi.createGraphics(); icon.paintIcon(null,g,0,0); g、 处置()


  • 我不需要透明,这就像魔术一样奏效。谢谢将查看文档以进一步研究。谢谢谢谢你的评论!一定会查看你的链接!