我正在尝试拆分一副卡片的图像并将单张卡片存储到图像中。
Image image;
BufferedImage deck = ImageIO.read( new URL( "http://www.jfitz.com/cards/classic-playing-cards.png" ) );
image = deck.getSubimage( x, y, width, height );
不兼容的类型:BufferedImage无法转换为Image
我看过的每个地方都说BufferedImage 是一个Image,这个问题不应该存在。 (注意:如果它看起来像一个类赋值,它就是,但我们应该做的就是从预定的目录中加载一个图像。我试图通过使用URL来进一步使用它。 )
编辑04/09/2014
我一直在使用不同的导入,所以我想我真正想问的问题是如何将java.awt.image.BufferedImage转换为java.scene.image.Image。感谢你目前的帮助!
答案 0 :(得分:2)
一旦我知道要问什么问题,Google就会很快回答这个问题。我找到了blog的快速解决方法。
BufferedImage tempCard = deck.getSubimage( x, y, width, height );
Image card = SwingFXUtils.toFXImage(tempCard, null );
尝试过并且效果很好!
答案 1 :(得分:0)
BufferedImage扩展了Image,这意味着你可以像这样声明一个BufferedImage:
Image myImage = ImageIO.read(new URL("my/url"));
这开始进入多态和继承。您的对象可能是BufferedImage,但BufferedImage仍然是一个Image,它可以作为一个。
一个更容易识别的例子可能是将ArrayList实例化为List
List<MyType> aList = new ArrayList<>();
这允许此ArrayList与所有类型的List对象兼容,就像BufferedImage一样。
它列出了这个抽象类的所有已知子类,包括BufferedImage。 (那里只有2个。)
答案 2 :(得分:0)
BufferedImage是Image的子类。 您无需进行任何转换。
你可以分配如下:
Image image;
BufferedImage deck = ImageIO.read( new URL( "http://www.jfitz.com/cards/classic-playing-cards.png" ) );
image = deck;// That will do
答案 3 :(得分:-1)
Image image = new ImageIcon(bufferedImage).getImage();
这就是我通常做的方式...... OR
Image image = (Image) bufferedImage;