我的绘画有点问题。
我使用以下方法加载图像:
public Image getImage(String name) {
Image image = (Image) this.storage_images.get(name);
if((image == null) && (!name.endsWith("-"))) {
try {
InputStream stream = this.getClass().getResourceAsStream(name);
if(stream != null) {
byte[] image_bytes = new byte[stream.available()];
stream.read(image_bytes);
image = Toolkit.getDefaultToolkit().createImage(image_bytes);
}
} catch (Exception exception) {
System.err.println("Unable to read image from JAR.");
}
if(image == null) {
try {
image = this.client.getImage(this.client.getCodeBase(), name);
} catch (Exception exception) {
System.out.println("ERROR: while receiving image(" + name + "): " + exception);
}
}
if(image != null) {
this.client.prepareImage(image, null);
this.storage_images.put(name, image);
}
}
return image;
}
当我绘制图像时,它会被切掉-奇怪的是。我只更改与高度成比例的。原始图片的尺寸为256x256。
这是问题所在:
在appletviewer(日食)上,这似乎是正确的。但是,当我编译它并在我的Web浏览器上打开它时,图像将被剪切(请参阅底部的屏幕截图)。
@Override
protected void paintComponent(Graphics g) {
super.paintComponent(g);
Graphics2D g2 = (Graphics2D) g;
g2.setRenderingHint(RenderingHints.KEY_ANTIALIASING, RenderingHints.VALUE_ANTIALIAS_ON);
new int[] {
40, // position left
10, // position top
65, // width (Original is 256)
65 // height (Original is 256)
};
g2.drawImage(getImage("warning.png"), insets.right + data[0], insets.bottom + data[1], data[2], data[3], null);
}
我希望你能告诉我,我做错了。
Webbrowser上的结果
Eclipse IDE *中AppletViewer上的结果
最佳答案
这是问题所在。
byte[] image_bytes = new byte[stream.available()];
可用值不是完整的图像大小,仅是下次读取时保证可用的字节数。
但无论如何,这些废话都不是必须的。大多数可以加载图像的方法都被重载以接受
InputStream
。进一步说明
g2.drawImage(
getImage("warning.png"),
insets.right + data[0],
insets.bottom + data[1],
data[2],
data[3],
null);
应该可能是:
g2.drawImage(
getImage("warning.png"),
insets.right + data[0],
insets.bottom + data[1],
data[2],
data[3],
this);
要获得比“可能”更好的结果,请发布MCTaRE(最小完整测试和可读示例)。