Bonjour,

Je me suis basé sur un exemple que j'ai trouvé sur le web. Le code trouvé prend une image de la webcam une fois un jButton est en action.
l'application tourne bien
Le problème est l'API signal une erreur d'initialisation ou de contenu null une fois j'essaie de prendre une image directement sans passer par le bouton:
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
Exception in thread "main" java.lang.NullPointerException
        at vision.eCamVison.savePNG(eCamVison.java:120)
        at vision.eCamVison.capture(eCamVison.java:153)
        at vision.eCamVison.main(eCamVison.java:85)
Code : Sélectionner tout - Visualiser dans une fenêtre à part
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
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
 
 
package vision;
 
import java.awt.BorderLayout;
import java.awt.Component;
import java.awt.Frame;
import java.awt.Graphics;
import java.awt.Graphics2D;
import java.awt.Image;
import java.awt.Panel;
import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;
import java.awt.event.WindowAdapter;
import java.awt.event.WindowEvent;
import java.awt.image.BufferedImage;
import java.awt.image.RenderedImage;
import java.io.FileOutputStream;
import java.io.IOException;
import java.util.logging.Level;
import java.util.logging.Logger;
import javax.imageio.ImageIO;
import javax.media.Buffer;
import javax.media.CaptureDeviceInfo;
import javax.media.CaptureDeviceManager;
import javax.media.Manager;
import javax.media.MediaLocator;
import javax.media.Player;
import javax.media.control.FrameGrabbingControl;
import javax.media.format.VideoFormat;
import javax.media.util.BufferToImage;
 
/**
 * @author
 */
 
public class eCamVison extends Panel implements ActionListener {
 
    public Player player;
    public CaptureDeviceInfo di;
    public MediaLocator ml;
    public Buffer buf;
    public Image img;
    public VideoFormat vf;
    public BufferToImage btoi;
    public BufferedImage bi;
    public FrameGrabbingControl fgc;
    public ImagePanel imgpanel;
 
    class ImagePanel extends Panel {
        public Image myimg;
 
        public ImagePanel() {
                setLayout(null);
                setSize(320, 240);
        }
 
        @Override
        public void paint(Graphics g) {
                if (myimg != null) {
                        g.drawImage(myimg, 0, 0, this);
                }
        }
 
        public void setImage(Image img) {
                this.myimg = img;
                repaint();
        }
    }    
 
    public static void main(String[] args) throws InterruptedException, IOException {
        Frame f = new Frame("iVision");
        final eCamVison ecv = new eCamVison();
        f.addWindowListener(new WindowAdapter() {
            @Override
            public void windowClosing(WindowEvent e) {
                    ecv.playerclose();
                    System.exit(0);
            }
        });
        f.dispose();        
        f.add("Center", ecv);
        f.pack();
        f.setVisible(true);
        ecv.capture();
        ecv.playerclose();
        ecv.exit();
    }    
 
    public eCamVison() {        
        setLayout(new BorderLayout());
        imgpanel = new ImagePanel();
        try {
            CaptureDeviceInfo deviceInfo = CaptureDeviceManager.getDevice(""
                    + "vfw:Microsoft WDM Image Capture (Win32):0");
            //CaptureDeviceManager.commit();
            System.out.println("video / Device name is: " +
                    deviceInfo.getName());
            System.out.println("video / Device supported formats are: " +
                    deviceInfo.getFormats());
            player = Manager.createRealizedPlayer(deviceInfo.getLocator());
            player.start();
            Component comp = player.getVisualComponent();
		if (comp != null) {
		add(comp, BorderLayout.NORTH);
            }
            add(imgpanel, BorderLayout.SOUTH);
        }
        catch (Exception e) {
            System.out.println("capture device not found");
            System.err.println(e.getMessage());
        }
    }
 
    public void actionPerformed(ActionEvent e) {
 
    }
 
    public void savePNG(Image img, String s) throws IOException {        
        bi = new BufferedImage(img.getWidth(null), img.getHeight(null), BufferedImage.TYPE_INT_ARGB_PRE);
        Graphics2D g2 = bi.createGraphics();
        g2.drawImage(img, null, null);
        FileOutputStream out;
        try {
            out = new FileOutputStream(s);
            boolean write = ImageIO.write((RenderedImage) img, "png", out);
            try {
                out.close();
            }
            catch (java.io.IOException io) {
                System.out.println("IOException");
                System.err.println(io.getMessage());
            }
        }
        catch (java.io.FileNotFoundException fnf) {
            System.out.println("File Not Found");
            System.err.println(fnf.getMessage());
        }
    }
 
    public void capture() throws IOException, InterruptedException {            
        // Grab a frame
        fgc = (FrameGrabbingControl) player.getControl(""
                + "javax.media.control.FrameGrabbingControl");
        buf = fgc.grabFrame();
        // Convert it to an image
        btoi = new BufferToImage((VideoFormat) buf.getFormat());
        img = btoi.createImage(buf);
        // show the image
        imgpanel.setImage(img);
        try {
            // save image
            savePNG(img, "test.png");
        } catch (IOException ex) {
            Logger.getLogger(eCamVison.class.getName()).log(Level.SEVERE, null, ex);
        }
    }
 
    public void playerclose() {        
        player.close();
        player.deallocate();
    }
 
    public void exit() {
        System.exit(0);
    }
 
}
les trois ligne qui causent problème sont:
120: bi = new BufferedImage(img.getWidth(null), img.getHeight(null), BufferedImage.TYPE_INT_ARGB_PRE);
153: savePNG(img, "test.png");
85: ecv.capture();