Ecrire sous image

Résolu
kh09 Messages postés 1 Date d'inscription   Statut Membre Dernière intervention   -  
 kh09 -
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 16761 Date d'inscription   Statut Modérateur Dernière intervention   3 020
 
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
kh09
 
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 16761 Date d'inscription   Statut Modérateur Dernière intervention   3 020
 
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
kh09
 
merci beaucoup pour votre aide :)
0
KX Messages postés 16761 Date d'inscription   Statut Modérateur Dernière intervention   3 020
 
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
kh09
 
merci :)
0