ScreenShot d'un panel et l'afficher dans un autre

Signaler
Messages postés
16
Date d'inscription
samedi 14 septembre 2013
Statut
Membre
Dernière intervention
17 janvier 2015
-
Messages postés
5365
Date d'inscription
dimanche 4 mai 2003
Statut
Modérateur
Dernière intervention
12 août 2021
-
Bonjour à tous,
J'ai un petit problème, je suis parvenue à réaliser un screenshot d'un panel, je l'ai ensuite affiché dans un panel différent et plus petit mais malheureusement, impossible de redimensionner le screenshot ce qui fait que je n'ai qu'une partie de celui-ci afficher. Une idée s'il vous plait ?
(J'ai cherché sur plusieurs forums et je n'ai pas trouvé de réponse)

voici mon code :
BufferedImage capture = new BufferedImage(getSize().width - 140, getSize().height, BufferedImage.TYPE_INT_RGB);
panel1.paint(capture.getGraphics());
panel2.add(new JLabel(new ImageIcon(capture)));
panel2.revalidate();

et voici ce que ça donne :

2 réponses

Messages postés
6
Date d'inscription
vendredi 2 janvier 2015
Statut
Membre
Dernière intervention
13 janvier 2015

Bonjour,
Ton code à l'air correct pourtant :/ . Attendons les autres utilisateurs pour avoir d'autres avis.
Messages postés
5365
Date d'inscription
dimanche 4 mai 2003
Statut
Modérateur
Dernière intervention
12 août 2021
111
Salut,

Ci-dessous un exemple de capture avec resize de l'image:
import java.awt.AWTException;
import java.awt.BorderLayout;
import java.awt.Color;
import java.awt.Component;
import java.awt.Dimension;
import java.awt.Graphics2D;
import java.awt.Rectangle;
import java.awt.RenderingHints;
import java.awt.Robot;
import java.awt.Toolkit;
import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;
import java.awt.image.BufferedImage;

import javax.swing.BorderFactory;
import javax.swing.ImageIcon;
import javax.swing.JButton;
import javax.swing.JFrame;
import javax.swing.JLabel;
import javax.swing.JPanel;

public class ScreenShot extends JFrame implements ActionListener {
  private JLabel            canvas           = null;

  public ScreenShot() {
    setDefaultCloseOperation(EXIT_ON_CLOSE);
    setSize(800, 600);
    setLocationRelativeTo(null);

    /* panel principale */
    final JPanel content = (JPanel) getContentPane();
    content.setLayout(new BorderLayout(5, 5));
    /* bouton pour faire la capture */
    final JButton shot = new JButton("Screenshot");
    shot.addActionListener(this);
    content.add(shot, BorderLayout.NORTH);

    /* label qui affiche la capture */
    canvas = new JLabel();
    canvas.setBorder(BorderFactory.createLineBorder(Color.BLACK));
    content.add(canvas, BorderLayout.CENTER);
  }

  public static void main(final String[] args) {
    new ScreenShot().setVisible(true);
  }

  @Override
  public void actionPerformed(final ActionEvent e) {
    try {
      /* creation d'une capture d'ecran */
      final Robot rb = new Robot();
      final BufferedImage image = rb.createScreenCapture(new Rectangle(Toolkit
          .getDefaultToolkit().getScreenSize()));
      /* resize de l'image a la taille du label */
      final BufferedImage rsize = resize(image, canvas);
      /* affichage de l'image */
      canvas.setIcon(new ImageIcon(rsize));
    } catch (final AWTException e1) {
      e1.printStackTrace();
    }
  }

  public BufferedImage resize(final BufferedImage source, final Component comp) {
    return resize(source, comp.getSize());
  }

  public BufferedImage resize(final BufferedImage source, final Dimension size) {
    // creation d'une image pour preparer le redimensionnement
    final BufferedImage bimage = new BufferedImage(size.width, size.height,
        BufferedImage.TYPE_INT_ARGB);
    final Graphics2D g = (Graphics2D) bimage.getGraphics();
    // on ajoute un rendu a l'image
    g.setRenderingHint(RenderingHints.KEY_INTERPOLATION,
        RenderingHints.VALUE_INTERPOLATION_BICUBIC);
    g.setRenderingHint(RenderingHints.KEY_DITHERING,
        RenderingHints.VALUE_DITHER_ENABLE);
    /* resize de l'image */
    g.drawImage(source, 0, 0, size.width, size.height, null);
    g.dispose();
    return bimage;
  }
}