亚洲在线久爱草,狠狠天天香蕉网,天天搞日日干久草,伊人亚洲日本欧美

為了賬號安全,請及時綁定郵箱和手機立即綁定
已解決430363個問題,去搜搜看,總會有你想問的

在java中并排顯示圖片

在java中并排顯示圖片

慕無忌1623718 2022-05-25 16:26:35
是否可以使用 BufferedImage 和 Graphics2D 并排顯示兩張圖片?還是我應該用其他方法來做?在下面的代碼中,我能夠顯示兩個圖像,但圖片 1 與圖片 2 重疊。package zdjecie;import java.awt.*;import java.awt.image.BufferedImage;import java.io.File;import java.io.IOException;import javax.imageio.ImageIO;import javax.swing.JPanel;public class ObrazPanel extends JPanel {    private BufferedImage image;    private BufferedImage image2;    public ObrazPanel() {        super();    File imageFile = new File("C:\\Users\\KostrzewskiT\\eclipse-workspace\\zdjecie\\src\\zdjecie\\java.jpg");    File imageFile2 = new File("C:\\Users\\KostrzewskiT\\eclipse-workspace\\zdjecie\\src\\zdjecie\\java2.jpg");         try {            image = ImageIO.read(imageFile);            image2 = ImageIO.read(imageFile2);        } catch (IOException e) {            System.err.println("Blad odczytu obrazka");            e.printStackTrace();        }        Dimension dimension = new Dimension(image.getWidth(), image.getHeight());        setPreferredSize(dimension);        Dimension dimension2 = new Dimension(image2.getWidth(), image2.getHeight());        setPreferredSize(dimension2);    }    @Override    public void paintComponent(Graphics g) {        Graphics2D g2d = (Graphics2D) g;        g2d.drawImage(image, 0, 0, this);        g2d.drawImage(image2, 200, 200, this);    }}
查看完整描述

3 回答

?
紅顏莎娜

TA貢獻1842條經驗 獲得超13個贊

你打setPreferredSize了兩次電話,結果第一次電話基本上什么也沒做。這意味著您始終擁有preferredSize等于第二張圖像的尺寸。您應該做的是將大小設置為new Dimension(image.getWidth() + image2.getWidth(), image2.getHeight())假設兩者具有相同的高度。如果不是這種情況,請將 設置height為兩個圖像的最大值。

其次,您需要將第二張圖像與第一張圖像完全偏移第一張圖像的寬度:

g2d.drawImage(image, 0, 0, this);
g2d.drawImage(image2, image.getWidth(), 0, this);


查看完整回答
反對 回復 2022-05-25
?
墨色風雨

TA貢獻1853條經驗 獲得超6個贊

數學邏輯不正確。請參閱getPreferredSize()計算所需寬度的正確方法的方法,以及paintComponent(Graphics)將它們并排放置的方法的更改。

另一種選擇(未在此答案中檢查)是將每個圖像放入 aJLabel中,然后將標簽添加到具有適當布局的面板中。

這是更改的效果:

http://img1.sycdn.imooc.com//628de8660001b69f15270465.jpg

import java.awt.*;

import java.awt.image.BufferedImage;

import javax.swing.*;

import java.net.*;

import javax.imageio.ImageIO;


public class ObrazPanel extends JPanel {


    private BufferedImage image;

    private BufferedImage image2;


    public ObrazPanel() throws MalformedURLException {

        super();


        URL imageFile = new URL("https://i.stack.imgur.com/7bI1Y.jpg");

        URL imageFile2 = new URL("https://i.stack.imgur.com/aH5zB.jpg");


        try {

            image = ImageIO.read(imageFile);

            image2 = ImageIO.read(imageFile2);

        } catch (Exception e) {

            System.err.println("Blad odczytu obrazka");

            e.printStackTrace();

        }

    }


    @Override

    public Dimension getPreferredSize() {

        int w = image.getWidth() + image2.getWidth();

        int h1 = image.getHeight();

        int h2 = image2.getHeight();

        int h = h1>h2 ? h1 : h2;

        return new Dimension(w,h);

    }


    @Override

    public void paintComponent(Graphics g) {

        // always best to start with this.. 

        super.paintComponent(g);

        Graphics2D g2d = (Graphics2D) g;

        g2d.drawImage(image, 0, 0, this);

        g2d.drawImage(image2, image.getWidth(), 0, this);

    }


    public static void main(String[] args) {

        Runnable r = new Runnable() {

            @Override

            public void run() {

                try {

                    UIManager.setLookAndFeel(UIManager.getSystemLookAndFeelClassName());

                } catch (Exception useDefault) {

                }

                ObrazPanel o;

                try {

                    o = new ObrazPanel();

                    JFrame f = new JFrame(o.getClass().getSimpleName());

                    f.setDefaultCloseOperation(JFrame.DISPOSE_ON_CLOSE);

                    f.setLocationByPlatform(true);


                    f.setContentPane(o);

                    f.pack();

                    f.setMinimumSize(f.getSize());


                    f.setVisible(true);

                } catch (MalformedURLException ex) {

                    ex.printStackTrace();

                }

            }

        };

        SwingUtilities.invokeLater(r);

    }

}


查看完整回答
反對 回復 2022-05-25
?
絕地無雙

TA貢獻1946條經驗 獲得超4個贊

每當發生變化并將它們繪制到另一個緩沖圖像時,我都會加入圖像。然后我可以在需要重新繪制面板時重新繪制組合圖像。

http://img1.sycdn.imooc.com//628de8770001aa5605270292.jpg

import java.awt.*;

import java.awt.image.BufferedImage;

import java.io.IOException;

import javax.imageio.ImageIO;

import javax.swing.*;


public class SideBySideImagePanel extends JPanel {

    private static final long serialVersionUID = 5868633578732134172L;

    private BufferedImage left;

    private BufferedImage right;

    private BufferedImage join;


    public SideBySideImagePanel() {

        ClassLoader loader = this.getClass().getClassLoader();

        BufferedImage left = null, right = null;


        try {

            left = ImageIO.read(loader.getResourceAsStream("resources/Android.png"));

            right = ImageIO.read(loader.getResourceAsStream("resources/Java.png"));

        } catch (IOException e) {

            e.printStackTrace();

        }


        this.setLeft(left);

        this.setRight(right);

    }


    public BufferedImage getLeft() {

        return left;

    }


    public void setLeft(BufferedImage left) {

        this.left = left;

    }


    public BufferedImage getRight() {

        return right;

    }


    public void setRight(BufferedImage right) {

        this.right = right;

    }


    @Override

    public void invalidate() {

        super.invalidate();

        join = combineImages(left, right);

        setPreferredSize(new Dimension(join.getWidth(), join.getHeight()));

    }


    @Override

    public void paintComponent(Graphics g) {

        g.drawImage(join, 0, 0, null);

    }


    private BufferedImage combineImages(BufferedImage left, BufferedImage right) {

        int width = left.getWidth() + right.getWidth();

        int height = Math.max(left.getHeight(), right.getHeight());

        BufferedImage combined = new BufferedImage(width, height, BufferedImage.TYPE_INT_ARGB); 

        Graphics g = combined.getGraphics();


        g.drawImage(left, 0, 0, null);

        g.drawImage(right, left.getWidth(), 0, null);


        return combined;

    }


    public static void main(String[] args) {

        SwingUtilities.invokeLater(new Runnable() {

            @Override

            public void run() {

                JFrame frame = new JFrame("Image Joiner");

                SideBySideImagePanel panel = new SideBySideImagePanel();


                frame.getContentPane().add(panel);

                frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);

                frame.setLocationRelativeTo(null);

                frame.pack();

                frame.setVisible(true);

            }

        });

    }

}


查看完整回答
反對 回復 2022-05-25
  • 3 回答
  • 0 關注
  • 225 瀏覽
慕課專欄
更多

添加回答

舉報

0/150
提交
取消
微信客服

購課補貼
聯系客服咨詢優惠詳情

幫助反饋 APP下載

慕課網APP
您的移動學習伙伴

公眾號

掃描二維碼
關注慕課網微信公眾號