Загрузка изображения построчно Java

Так что это будет звучать смешно, но я работаю над проектом, в котором я намеренно хочу замедлить загрузку изображения так, чтобы оно загружалось построчно. Могу ли я это сделать? В настоящее время у меня есть изображение в ImagePane, которое является просто расширением JPanel:

public ImagePane() {
        initComponents();
        image = null;
        //this.setAutoscrolls(true);
    }
    public void setImage(String path) throws IOException {
        image = ImageIO.read(getClass().getResource(path));
    }

    @Override
    public void paintComponent(Graphics g)
    {
        //Graphics2D g2 = (Grahpics2D)g;
        g.drawImage(image, 0,0, this);
    }

И в моем окне, что я пытаюсь отобразить это как:

ImagePane image = new ImagePane();
try {
    image.setImage("netscapelogo2.png");
}
catch (IOException e) {
    System.out.print("Failed to Set");
    e.printStackTrace();
}
//jScrollPane1.add(image);
jScrollPane1.setViewportView(image);

Я полагаю, что мне нужно, чтобы кто-то изменил мой метод paintComponent, чтобы сделать это, но я не уверен, как именно это сделать.

1 ответ

Решение

Это решение использует предпосылку I would simulate that the image is loading line by line by uncovering it gradually. – rodrigoap Таким образом, изображение загружается сразу и отображается только так, как если бы оно было прочитано построчно!

решение было бы создать поток и позволить поток к работе...

Runnable r = new Runnable(){

    @Override
    run(){
        for(int i = 0; i < image.getHeight(); i++){
            // wait 100ms to 'slow down'
            Thread.sleep(100)// surround with try/catch, it may throw an exception
            line = line + 1; //increase amount of visible lines
            repaint(); //update the panel
        }
    }
}

//i don't know when you want to start the animation
new Thead(r).start(); //so trigger at free will

когда вы рисуете изображение, вы просто рисуете количество линий, а не все изображение вообще...

@Override
public void paintComponent(Graphics g)
{
    super(g);
    int w = image.getWidth();
    int h = image.getHeight();
    g.drawImage(image, 0,0, w, line, 0,0,w,h,this);
}

Метод drawImage немного странный, обратитесь к документу за дополнительной помощью.

конечно, вам нужно определить private int line = 0; в каком-то месте

Другие вопросы по тегам