有 Java 编程相关的问题?

你可以在下面搜索框中键入要查询的问题!


共 (5) 个答案

  1. # 1 楼答案

    根据the documentation for Image,如果大小、宽度或高度(分别)未知,这些方法将返回-1

    此外,ImageObserver只是一个接口,它提供了获取有关正在构造的图像对象信息的通知的方法

  2. # 2 楼答案

    在GraphTest中,覆盖imageUpdate:

    @Override
    public void imageUpdate(Image img, int flags,
                   int x, int y, int width, int height) {
        if ((flags & (WIDTH|HEIGHT)) == (WIDTH|HEIGHT)) {
            // width and height have meaningful values, do your resize here
        }
        super.imageUpdate(img, flags, x, y, width, height);
    }
    
  3. # 3 楼答案

    根据the Java docs,如果在图像仍处于构建阶段时对其调用getHeight()等,使得高度不是真正的“已知”,则返回-1,并通知提供的ImageObserver

    ImageObserver是一个接口,它为您提供了一种方法,当图像以某种方式更新时,会调用回调方法。ImageObserver由java实现。awt。组件,因此如果在包含类中扩展它,则可以重写imageUpdated(),并在异步调用函数时存储图像高度(如果image.getHeight返回-1)

  4. # 4 楼答案

    您可以使用MediaTrack获取图像的宽度和宽度;像这样的高度:

     // ...
    
     Image img;
     // ...
     // ...  loading the image using IO or Toolkit ot something
    
     MediaTracker MTrack = new MediaTracker(this); // in my case, 'this' is a JFrame
    
     MTrack.addImage(img,1);
     try 
    {
        MTrack.waitForID(1);
    } 
    catch(InterruptedException e) 
    {
       e.getMessage();
    }
    
    int width = img.getWidth(null);
    int height = img.getHeight(null);
    
    double ratio = (double)width/(double)height;
    
    // ....
    // ....
    
  5. # 5 楼答案

    问题是加载图像所需的时间

    只要图像没有加载,你就会得到-1。当图像最终加载时,它会触发ImageObserver。obeserver,在您的例子中是Background实例g.drawImage(bkg, 0, 0, this);,将强制重新绘制背景,从而绘制现在加载的图像

    您还可以使用java.awt.MediaTracker来跟踪图像的状态

    []