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

时间:2014-03-15 15:51:03

标签: 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++;
                    }

1 个答案:

答案 0 :(得分:4)

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

  

...将Toolkit.getDefaultToolkit().getImage(...)替换为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);