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