java - 错误 : sun. awt.image.ToolkitImage 无法转换为 java.awt.image.BufferedImage

标签 java swing

请帮我解决这个问题 sun.awt.image.ToolkitImage 无法转换为 java.awt.image.BufferedImage

 if (shape.hasImage())
                    {
                        // If this shape is an image, extract image to file
                        String extension = ImageTypeToExtension(shape.getImageData().getImageType());
                        String imageFileName = MessageFormat.format("Image.ExportImages.{0} Out.{1}", imageIndex, extension);
                        String strBarCodeImageExtracted = "" + imageFileName;
                        shape.getImageData().save(strBarCodeImageExtracted);

                        // Recognize barcode from this image
                        BarCodeReader reader = new BarCodeReader ((BufferedImage) Toolkit.getDefaultToolkit().getImage(strBarCodeImageExtracted),BarCodeReadType.Code39Standard);
                        while (reader.read())
                        {
                            System.out.println("codetext: " + reader.getCodeText());
                        }
                        imageIndex++;
                    }

最佳答案

编辑:这个答案在写完评论后被接受,所以必须假设评论是实际的解决方案。评论是

... to replace Toolkit.getDefaultToolkit().getImage(...) with ImageIO.read(...) ...


原始答案:

您可以尝试使用 ImageIO 直接读取图像,或者考虑将图像绘制到新分配的 BufferedImage 中,例如用类似的方法

public static BufferedImage convertToBufferedImage(Image image)
{
    BufferedImage newImage = new BufferedImage(
        image.getWidth(null), image.getHeight(null),
        BufferedImage.TYPE_INT_ARGB);
    Graphics2D g = newImage.createGraphics();
    g.drawImage(image, 0, 0, null);
    g.dispose();
    return newImage;
}

然后在你的情况下:

Image image = Toolkit.getDefaultToolkit().getImage(strBarCodeImageExtracted);
BufferedImage bufferedImage = convertToBufferedImage(image);
BarCodeReader reader = new BarCodeReader(bufferedImage,BarCodeReadType.Code39Standard);

关于java - 错误 : sun. awt.image.ToolkitImage 无法转换为 java.awt.image.BufferedImage,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/22426040/

相关文章:

java - 如何使用 Java Regex 查找字符串中所有重复的字符序列?

java - 使用 apache POI 和 java 访问 excel 数据时出现错误

java - 使用 setVisible 方法隐藏和显示图像

java - 当相应的 JTextfield 为空时,如何填充 JTable 中的所有项目

java - Telegram bot api : Error code 429, 错误:请求太多:稍后重试

java - 将字符串中的一系列数字转换为不同的数字

java - 多级投影上的 Spring Data Neo4J 层次结构映射

java - 我是否应该使用布局管理器,即使它看起来没有必要?

java - 从 jcombobox 中移除焦点后,itemlistener 获取事件

java - 为什么这个 JLabel 不断重绘?