【问题标题】:convert Image to Buffered Image in an applet program在小程序程序中将图像转换为缓冲图像
【发布时间】:2013-07-10 06:59:25
【问题描述】:

我尝试了很多方法在一个小程序中将 Image 类的图像转换为 BufferedImage。我得到了一种从 netbeans 运行时运行良好的方法。但是在通过浏览器运行时,相同的代码不起作用。我试过的代码是

ImageIcon icon = new ImageIcon(orgImage);
BufferedImage buffer = ((ToolkitImage) icon.getImage()).getBufferedImage();

还尝试了以下

1) BufferedImage buffer = ((ToolkitImage) orgImage).getBufferedImage();

2) BufferedImage  buffer = new BufferedImage(
   orgImage.getWidth(null), orgImage.getWidth(null), BufferedImage.TYPE_INT_RGB);
   buffer.getGraphics().drawImage(orgImage, 0, 0, null);

orgImage 是彩色图像。

在所有这些情况下,缓冲区都是空的..

我的问题有什么解决方案?

【问题讨论】:

  • 1) 为了尽快获得更好的帮助,请发帖 SSCCE。 2)..drawImage(orgImage, 0, 0, null); 理想情况下应该是drawImage(orgImage, 0, 0, this); 3)“缓冲区在所有这些情况下都是空的..”* 我不明白在第二种情况下它怎么可能是空的,但是 SSCCE 应该澄清这一点..

标签: java image swing applet imageicon


【解决方案1】:

要将图像转换为缓冲图像,您可以使用以下函数:

/**
 * Converts a given Image into a BufferedImage
 * 
 * @param img The Image to be converted
 * @return The converted BufferedImage
 */
public BufferedImage toBufferedImage(Image img){
    if (img instanceof BufferedImage) {
        return (BufferedImage) img;
    }
    // Create a buffered image with transparency
    BufferedImage bimage = new BufferedImage(img.getWidth(null), img.getHeight(null), BufferedImage.TYPE_INT_ARGB);
    // Draw the image on to the buffered image
    Graphics2D bGr = bimage.createGraphics();
    bGr.drawImage(img, 0, 0, null);
    bGr.dispose();
    // Return the buffered image
    return bimage;
}

将它粘贴到您班级的任何位置并使用以下代码:

BufferedImage bi = toBufferedImage(orgImage);

~问候马克斯

【讨论】:

  • 根据加载方式,Image 可能无法完全实现,这意味着如果没有某种ImageObserverdrawImage 方法可能会导致根本不绘制任何东西。 .
  • 如果图片没有加载,会为null na?
  • 我在一个线程中编写了代码..代码写在一个 if 条件中,检查图像是否为空..如果图像仍在加载,它将为空并且不会执行..当图像完全加载后,它会进入if条件并转换图像..我的假设是正确的还是错误的?
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2023-04-01
  • 1970-01-01
  • 1970-01-01
  • 2020-06-12
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多