comment enregister une image dans un repertoire spécifique et les afficher
Version imprimable
comment enregister une image dans un repertoire spécifique et les afficher
- Pour sauvegarder une image : ImageIO.write()
- Pour lire une image depuis un fichier: ImageIO.read()
- Pour afficher une image : ça dépend où (Swing, JavaFX, SWT, web, autre ?)
l'image est scannée par le scanner voici le code
Code:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78 /* * To change this license header, choose License Headers in Project Properties. * To change this template file, choose Tools | Templates * and open the template in the editor. */ package javaapplication2; import java.io.File; import javax.imageio.ImageIO; import java.awt.image.BufferedImage; import javax.swing.ImageIcon; import uk.co.mmscomputing.device.scanner.Scanner; import uk.co.mmscomputing.device.scanner.ScannerDevice; import uk.co.mmscomputing.device.scanner.ScannerListener; import uk.co.mmscomputing.device.scanner.ScannerIOException; import uk.co.mmscomputing.device.scanner.ScannerIOMetadata; public class Twain1 implements ScannerListener{ static Twain1 app; Scanner scanner; public Twain1()throws ScannerIOException{ scanner=Scanner.getDevice(); scanner.addListener(this); scanner.acquire(); } public void update(ScannerIOMetadata.Type type, ScannerIOMetadata metadata){ if(type.equals(ScannerIOMetadata.ACQUIRED)){ BufferedImage image=metadata.getImage(); System.out.println("Have an image now!"); try{ String sg="hg"; // File fil = new File("C:\\Users\\pc\\Desktop\\photo"+sg+".jpg"); // File fi=new File("C:\\Users\\pc\\Pictures\\18\\IMAGE"+sg+".jpg"); ImageIO.write(image, "jpg", new File("C:\\Users\\pc\\Pictures\\18\\IMAGE"+sg+".jpg")); java.awt.Image ima11 = image; java.awt.Image imfi; imfi = ima11.getScaledInstance(nouveauarrivée.jLabel9.getWidth(),nouveauarrivée.jLabel9.getHeight(),java.awt.Image.SCALE_SMOOTH ); ImageIcon finalim = new ImageIcon( imfi); // File theDir2 = new File("C:\\Users\\pc\\Desktop\\fonctionnaire"+mmsc_image.jpg+"/"); nouveauarrivée.jLabel9.setIcon(finalim); /* */ }catch(Exception e){ e.printStackTrace(); } }else if(type.equals(ScannerIOMetadata.NEGOTIATE)){ ScannerDevice device=metadata.getDevice(); try{ device.setShowUserInterface(true); device.setShowProgressBar(true); device.setResolution(100); }catch(Exception e){ e.printStackTrace(); } }else if(type.equals(ScannerIOMetadata.STATECHANGE)){ System.err.println(metadata.getStateStr()); if(metadata.isFinished()){ System.exit(0); } }else if(type.equals(ScannerIOMetadata.EXCEPTION)){ metadata.getException().printStackTrace(); } } }
Donc c'est une BufferedImage...
- Le plus simple est de la transformer en Icon puis d'utiliser un JLabel pour l'afficher (JLabel label = new JLabel(new ImageIcon(image))).
Par exemple :
ou, si l'image est grandeCode:
1
2
3 JLabel label = new JLabel(new ImageIcon(image)); JOptionPane.showMessageDialog(null, label);
On peut utiliser la même technique pour afficher dans n'importe quel autre container Swing.Code:
1
2
3
4
5 JLabel label = new JLabel(new ImageIcon(image)); JScrollPane scrollPane = new JScrollPane(label); scrollPane.setPreferredSize(new Dimension(300,300)); JOptionPane.showMessageDialog(null, scrollPane);
Mais la limite c'est que la taille de l'image ne s'adaptera pas à la taille de son container- Pour que la taille s'adapte, soit il y a la manière un peu complexe à base d'évenements et de getScaledImage(), soit, plus simple, d'afficher dans le fond d'un JPanel, en redéfinissant paintComponent. On peut faire un composant par exemple :
Code:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36 public class ImagePanel extends JPanel { private BufferedImage image; public ImagePanel(BufferedImage image) { this.image=image; } public void setImage(BufferedImage image) { this.image=image; repaint(); } @Override protected void paintComponent(Graphics g) { super.paintComponent(g); if ( image!=null ) { final double width; final double height; if ( image.getWidth()>image.getHeight() ) { final double scale = (getWidth()*1f)/image.getWidth(); width = getWidth(); height = image.getHeight()*scale; } else { final double scale = (getHeight()*1f)/image.getHeight(); height = getHeight(); width = image.getWidth()*scale; } final double x = (getWidth()-width)/2; final double y = (getHeight()-height)/2; g.drawImage(image, (int)x, (int)y, (int)width, (int)height, this); } } }
C bon c'est résolu merci bq pour ton aide
Oui j 'untilise un buffer des image mais des fois il affiche des fois non je sais pas au est le problm
Je peux difficilement le savoir aussi si je n'ai pas de code...
Code:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117 package javaapplication2; import java.io.File; import javax.imageio.ImageIO; import java.awt.image.BufferedImage; import java.text.SimpleDateFormat; import javax.swing.ImageIcon; import uk.co.mmscomputing.device.scanner.Scanner; import uk.co.mmscomputing.device.scanner.ScannerDevice; import uk.co.mmscomputing.device.scanner.ScannerListener; import uk.co.mmscomputing.device.scanner.ScannerIOException; import uk.co.mmscomputing.device.scanner.ScannerIOMetadata; public class Twain12 implements ScannerListener{ static Twain12 app; Scanner scanner; public Twain12()throws ScannerIOException{ scanner=Scanner.getDevice(); scanner.addListener(this); scanner.acquire(); } public void update(ScannerIOMetadata.Type type, ScannerIOMetadata metadata){ if(type.equals(ScannerIOMetadata.ACQUIRED)){ BufferedImage image=metadata.getImage(); System.out.println("Have an image now!"); try{ // String sg="hg"; String a= nouveauarrivée_1.jTextField1.getText(); String b=nouveauarrivée_1.jTextField4.getText(); a=a.concat(b); String dir1 = nouveauarrivée_1.jComboBox1.getSelectedItem().toString(); System.out.println("cqsf"+dir1); SimpleDateFormat dfo=new SimpleDateFormat("dd-MM-yyyy") ; String datenre=dfo.format(nouveauarrivée_1.jDateChooser4.getDate()); ; String c=""+datenre.charAt(3)+""+datenre.charAt(4);// le moi /* File fil = new File("C:\\Users\\pc\\Pictures\\courrier arrivées\\"+dir1+"/"); System.out.println("cqsf"+dir1); if(!fil.exists()){ fil.mkdir(); System.out.println("cqsf"+dir1); }// File fi=new File("C:\\Users\\pc\\Pictures\\courrier arrivées\\"+dir1+"\\"+c+"/"); if(!fi.exists()) {fi.mkdir(); System.out.println("cqsf"+c); }*/ File fi2=new File("C:\\Users\\pc\\Pictures\\courrier arrivées\\"+dir1+"\\"+c+"\\"+a+".jpg"); //if(!fi2.exists()) //{ fi2.mkdir(); // } // ImageIO.write(image, "jpg", fi2); System.out.println("cqsf"+a); // } ImageIO.write(image, "jpg", fi2); java.awt.Image ima11 = image; java.awt.Image imfi; imfi = ima11.getScaledInstance(nouveauarrivée_1.jLabel9.getWidth(),nouveauarrivée_1.jLabel9.getHeight(),java.awt.Image.SCALE_SMOOTH ); ImageIcon finalim = new ImageIcon( imfi); // File theDir2 = new File("C:\\Users\\pc\\Desktop\\fonctionnaire"+mmsc_image.jpg+"/"); nouveauarrivée_1.jLabel9.setIcon(finalim); } catch(Exception e){ e.printStackTrace(); } }else if(type.equals(ScannerIOMetadata.NEGOTIATE)){ ScannerDevice device=metadata.getDevice(); System.out.println("erreur ndfn"); try{ device.setShowUserInterface(true); device.setShowProgressBar(true); device.setResolution(100); // BufferedImage image=metadata.getImage(); System.out.println("Have an image nowklll!"); }catch(Exception e){ e.printStackTrace(); } }else if(type.equals(ScannerIOMetadata.STATECHANGE)){ System.err.println(metadata.getStateStr()); System.out.println("errfinnnnn"); if(metadata.isFinished()){ System.out.println("errf"); System.exit(0); } }else if(type.equals(ScannerIOMetadata.EXCEPTION)){ metadata.getException().printStackTrace(); System.out.println("erreur finnnnn"); } } }
il n'affiche aucun erreur