Ecrire sous image

Résolu/Fermé
kh09 Messages postés 1 Date d'inscription mardi 21 mai 2013 Statut Membre Dernière intervention 21 mai 2013 - 21 mai 2013 à 15:18
 kh09 - 22 mai 2013 à 22:48
bonjour , je suis en trains de développer une petite application dans laquelle je besoin d'avoir une sous image d'une image donnée , j'ai essayé avec se code mais aucune résultat ne paraisse
BufferedImage bii= bi.getSubimage(y, w, m, h);

Graphics2D g =bii.createGraphics();

g.drawImage(bii, null,0, 0);
g.drawImage(bii, 0, 0, null);
JFrame kk= new JFrame();
JButton ss=new JButton();
kk.add(ss,g);
kk.setVisible(true);

//g.drawImage(bii, m, h, null);

String f ="a.JPEG";
boolean mv= ImageIO.write(bii, ".JPEG", new File(f));
JFrame frame = new JFrame();
JLabel label = new JLabel( new ImageIcon("1.jpg") );

frame.getContentPane().add(label);
frame.setVisible(true);
j'ai essayé de savoir si le problème est dans la création ou l'enregistrement de l'image mais je n'ai pas réussi. Votre aide SVP
A voir également:

1 réponse

KX Messages postés 16753 Date d'inscription samedi 31 mai 2008 Statut Modérateur Dernière intervention 25 novembre 2024 3 019
21 mai 2013 à 19:23
C'est juste pour l'afficher ton morceau d'image ? Dans ce cas tu devrais utiliser un autre g.draw (avec plus de paramètres). Exemple :

import java.awt.Graphics;
import java.awt.Image;
import java.awt.Rectangle;
import java.io.File;
import java.io.IOException;
import javax.imageio.ImageIO;
import javax.swing.JFrame;
import javax.swing.JPanel;

class ResizePanel extends JPanel
{
    private static final long serialVersionUID = 1;
    
    private Image image;
    private Rectangle bounds;
    
    public ResizePanel(Image image, Rectangle bounds)
    {
        this.image = image;
        this.bounds = bounds;
    }
    
    @Override
    public void paint(Graphics g)
    {
        super.paint(g);
        
        g.drawImage(image, 0, 0, 0+bounds.width, 0+bounds.height, bounds.x, bounds.y, bounds.x+bounds.width, bounds.y+bounds.height, this);
    }
}

public class Test
{
public static void main(String[] args) throws IOException
{
    Image image = ImageIO.read(new File("C:/test.png"));
    Rectangle bounds = new Rectangle(100, 100, 200, 200);
    ResizePanel panel = new ResizePanel(image, bounds);
    
    JFrame frame = new JFrame();
    frame.setContentPane(panel);
    frame.setSize(300,300);
    frame.setVisible(true);
    frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
}
}
2
merci pour la solution elle m'a aidé. Est ce que vous avez une idée comment enregistré l'image affiché sous format jpg ?
0
KX Messages postés 16753 Date d'inscription samedi 31 mai 2008 Statut Modérateur Dernière intervention 25 novembre 2024 3 019
22 mai 2013 à 18:34
Je crois avoir déjà fair un code qui permettait d'enregistrer un objet Graphics (obtenu en faisant panel.getGraphics() par exemple) directement dans un fichier il faudrait que je cherche comment, mais de mémoire le résultat était d'assez mauvaise qualité. Il vaudrait mieux manipuler directement l'image originale, d'autant que c'est très simple...

BufferedImage image = ImageIO.read(new File("C:/test.png"));
Rectangle bounds = new Rectangle(100, 100, 200, 200);
BufferedImage sub = image.getSubimage(bounds.x, bounds.y, bounds.width, bounds.height);
ImageIO.write(sub, "jpg", new File("C:/test.jpg"));
0
merci beaucoup pour votre aide :)
0
KX Messages postés 16753 Date d'inscription samedi 31 mai 2008 Statut Modérateur Dernière intervention 25 novembre 2024 3 019
22 mai 2013 à 20:30
Remarque : voici comment on pourrait enregistrer directement ce qui est affiché dans une image, mais ce n'est pas la bonne manière de faire pour une image.

public static void saveComponent(Component component, String formatName, File output) throws IOException
{
    BufferedImage buf = new BufferedImage(component.getWidth(), component.getHeight(), BufferedImage.TYPE_INT_RGB);
    component.paintAll(buf.getGraphics());
    ImageIO.write(buf, formatName, output);
}

public static void main(String[] args) throws IOException
{
    JFrame frame = new JFrame();
    frame.setSize(300,300);
    frame.add(new JButton("Nord"),BorderLayout.NORTH);
    frame.add(new JButton("Sud"),BorderLayout.SOUTH);
    frame.add(new JButton("Centre"),BorderLayout.CENTER);
    frame.add(new JButton("Est"),BorderLayout.EAST);
    frame.add(new JButton("Ouest"),BorderLayout.WEST);
    frame.setVisible(true);
    frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
    
    saveComponent(frame.getContentPane(),"png",new File("C:/test.png"));
}
0
merci :)
0