#java
#java
Вопрос:
У меня есть небольшая Java-программа, которая использует ImageIcons на JLabels для отображения изображений. Я хочу взять два ImageIcon, объединить их в один ImageIcon и прикрепить это новое изображение к JLabel, так что что-то вроде:
ImageIcon img1 = new ImageIcon("src/inc/img/pic1.png");
ImageIcon img2 = new ImageIcon("src/inc/img/pic2.png");
//combine the two into a new Image
// ? ImageIcon newImg = img1 img2;
Я просто не уверен, как это сделать, это просто должно быть так, как будто я открыл два файла изображений в paint и скопировал один поверх середины другого (pic2 примерно вдвое меньше pic1) Какие-нибудь советы?
Ответ №1:
Я не пробовал этого, но вы должны быть в состоянии сделать что-то подобное (нарисовать их рядом)
Image image1 = img1.getImage();
Image image2 = img2.getImage();
int w = image1.width image2.width;
int h = Math.max(image1.height, image2.height);
Image image = new BufferedImage(w, h, TYPE_INT_RGB);
Graphics2D g2 = image.createGraphics();
g2.drawImage(image1, 0, 0, null);
g2.drawImage(image2, image1.width, 0, null);
g2.dispose();
ImageIcon newImg = new ImageIcon(image);
Комментарии:
1. Несколько небольших изменений, чтобы второе изображение было сосредоточено на первом, и оно отлично сработало, спасибо
Ответ №2:
Понял, что работает с этим:
@Test
public void testIcon() throws IOException, InterruptedException {
File file1 = new File("/etc/alternatives/start-here-32.png");
File file2 = new File("/etc/alternatives/start-here-24.png");
BufferedImage img1 = ImageIO.read(file1);
BufferedImage img2 = ImageIO.read(file2);
img1.getGraphics().drawImage(img2, 0, 0, img2.getWidth(null), img2.getHeight(null), 0, 0, img2.getWidth(null), img2.getHeight(null), null);
showImage(img1);
Thread.sleep(10000);
}
Вот метод ShowImage:
public void showImage(final BufferedImage image) {
JFrame frame = new JFrame();
frame.setDefaultCloseOperation(WindowConstants.DISPOSE_ON_CLOSE);
frame.setLayout(new BorderLayout());
JPanel imagePanel = new JPanel() {
@Override
public void paint(java.awt.Graphics g) {
g.drawImage(image, 0, 0, image.getWidth(), image.getHeight(), 0, 0, image.getWidth(), image.getHeight(), null);
};
};
frame.getContentPane().add(imagePanel, BorderLayout.CENTER);
frame.setSize(new Dimension(image.getWidth() 100, image.getHeight() 100));
frame.setLocationRelativeTo(null);
frame.setVisible(true);
}
Ответ №3:
Класс Compound Icon предоставляет вам гибкость для комбинирования значков различными способами.