gpt4 book ai didi

java - 如何逐步加载图像以便 ImageObserver 工作?

转载 作者:行者123 更新时间:2023-11-29 05:54:21 25 4
gpt4 key购买 nike

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);
}

}

关于java - 如何逐步加载图像以便 ImageObserver 工作?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/12745483/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com