Ecrire sous image
Résolu
kh09
Messages postés
1
Statut
Membre
-
kh09 -
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
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
1 réponse
-
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); } }-
-
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")); -
-
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")); } -
-