如何逐步加载图像,以便图像观察器工作



Graphics.drawImage()方法中ImageObserver能力。在实际操作中看到这一点的最简单方法是什么?我想ImageIO.read()返回BufferedImage所以它都在内存中。如何获取部分加载的图像以便观察者调用?

这似乎调用了图像观察者。 如果要调用 drawImage 方法并且图像仍在处理中,它将开始使用 ImageObserver 。 缩放是导致图像通常被处理的一个例子。

import java.awt.*;
import java.awt.image.*;
import java.io.*;
import java.net.*;
import javax.imageio.ImageIO;
import javax.swing.*;
public class ImageObserverDemo extends Box{
    Image bi;
    Image bi2;
    Dimension d = new Dimension(300,200);
    public ImageObserverDemo() {
        super(BoxLayout.Y_AXIS);        
        try {
            bi = ImageIO.read(new URL("http://apod.nasa.gov/apod/image/0304/bluemarble2k_big.jpg"));
            bi = bi.getScaledInstance(100, 100, BufferedImage.SCALE_SMOOTH);
            bi2 = new BufferedImage(bi.getWidth(this), bi.getHeight(this), BufferedImage.TYPE_INT_ARGB);
            bi2.getGraphics().drawImage(bi, 0, 0, this);
        } catch (IOException e) {
            e.printStackTrace();
        }
    }
    @Override
    public boolean imageUpdate(final Image img, int infoflags, int x, int y,
            int width, int height) {
        boolean result = true;
        if((infoflags | ImageObserver.FRAMEBITS) == ImageObserver.FRAMEBITS){
            result = false;
        } else if((infoflags | ImageObserver.ALLBITS) == ImageObserver.ALLBITS){
            result = false;
        }
        if(result){
            System.out.println("Image incomplete");
        } else{
            System.out.println("Complete");
        }
        return result;
    }
    @Override
    public Dimension getPreferredSize(){
        return d;
    }
    public static void main(String[] args){
        final JFrame frame = new JFrame();
        frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
        frame.add(new ImageObserverDemo());
        frame.pack();
        frame.setLocationRelativeTo(null);
        frame.setVisible(true);
    }
}

相关内容

  • 没有找到相关文章

最新更新