为什么Image.getWidth()得不到图片的宽度?

hzhou 2005-12-25 09:03:24
public class ImgPanel extends JPanel{
private Image _img=null;
private int _imgWidth,_imgHeight; // 初始图片的长宽
public ImgPanel() {
}
public void setImage(Image image){
_img=image;
repaint();
}
public void paintComponent(Graphics g){
if(_img!=null){
_imgWidth=_img.getWidth(this); // 没有得到值,只返回了一个-1
_imgHeight=_img.getHeight(this); // 得到值了
g.drawImage(_img,0,0,_imgWidth,_imgHeight,this);
}
}
}

我用跟踪发现Image.getWidth(this)得到-1,而Image.getHeight(this)却能得到正确值.
by the way:图片是用这个方法得到的
Image img=Toolkit.getDefaultToolkit().createImage("C:\\1.JPG"); 然后传到这个ImgPanel中去的。
...全文
1199 4 打赏 收藏 转发到动态 举报
AI 作业
写回复
用AI写文章
4 条回复
切换为时间正序
请发表友善的回复…
发表回复
bytelogic 2010-06-25
  • 打赏
  • 举报
回复
Toolkit.getDefaultToolkit().createImage( "C:\\1.JPG "),用异步的方式创建图片。当线程执行到_img.getWidth(this)语句时,创建图片的线程还没准备好图片所以会返回-1。

你可以在img.getWidth 传递一个ImageObserver对象,当图片处理完通知ImageObserver后再做跟image相关的操作。或者简单点用同步方式创建图片
lonelytao 2006-03-02
  • 打赏
  • 举报
回复
我刚刚从一个老外的代码上找到了答案
Image image = Toolkit.getDefaultToolkit().getImage(imageName);
//the following line is important,
//it is ensuring the pixels of the image are loaded
image = new ImageIcon(image).getImage();
lonelytao 2006-03-02
  • 打赏
  • 举报
回复
我也遇到了这个问题,不知道是不是sun的ToolKitImage有什么Lazy load的机制。关注中.....
prok 2005-12-26
  • 打赏
  • 举报
回复
你把this去了试试.我一直这么用没有问题的.

62,634

社区成员

发帖
与我相关
我的任务
社区描述
Java 2 Standard Edition
社区管理员
  • Java SE
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧