Προς το περιεχόμενο

Webcam image capture ( JMF )


Axelfc

Προτεινόμενες αναρτήσεις

Δημοσ.

Προσπαθω να κανω ενα προγραμματακι σε Java με χρηση του JMF - Java Media Framework το οποιο θα χρησιμοποιει τη USB webcam μου και θα κανει capture σε αρχειο μια φωτογραφια. Το προγραμμα μου δουλευει χωρις να πεταει καποιο error. Το προβλημα ειναι πως η εικονα που αποθηκευεται ενα σκετο μαυρο.

 

Αν μπορει καποιος ας βοηθησει...

 

>
import java.awt.*;
import java.awt.image.BufferedImage;
import java.io.*;
import javax.media.*;
import javax.media.CaptureDeviceInfo;
import javax.media.CaptureDeviceManager;
import javax.media.control.FrameGrabbingControl;
import javax.media.format.VideoFormat;
import javax.media.util.BufferToImage;
import com.sun.image.codec.jpeg.JPEGCodec;
import com.sun.image.codec.jpeg.JPEGEncodeParam;
import com.sun.image.codec.jpeg.JPEGImageEncoder;
import javax.media.control.FormatControl;

public class FrameCapture {
   static MediaLocator ml;
   static Player player;
   static Component videoScreen;

   static Buffer buf = null;
   static String str = null;

   static BufferToImage btoi = null;
   static BufferedImage bi = null;
   static Image frameImage = null;

   static String filename = null;

   static FormatControl formatControl = null;
   static Format currFormat = null;
   static VideoFormat currentFormat = null;

   public static void main(String[] args) {
       try {
           ml = new MediaLocator("vfw://0");
           player = Manager.createRealizedPlayer(ml);
           player.start();
           videoScreen = player.getVisualComponent();
           Frame frame = new Frame();
           frame.setBounds(10, 10, 300, 300);
           frame.add(videoScreen);
           frame.setVisible(true);

           for (int i = 0; i < 5000000; i++) {
           }

           FrameGrabbingControl fgc = (FrameGrabbingControl)player.getControl("javax.media.control.FrameGrabbingControl");
           if (fgc == null) {
               System.out.println("fgc == null");
           }

           buf = fgc.grabFrame();
           if (buf == null) {
               System.out.println("buf == null");
           }

           btoi = new BufferToImage((VideoFormat) buf.getFormat());
           if (btoi == null) {
               System.out.println("btoi == null");
           }

           formatControl = (FormatControl)player.getControl ( "javax.media.control.FormatControl" );
           if (formatControl == null) {
               System.out.println("formatControl == null");
           }

           currFormat = formatControl.getFormat();
           if (currFormat == null) {
               System.out.println("currFormat == null");
           }

           currentFormat = (VideoFormat)currFormat;
           //VideoFormat currentFormat = (VideoFormat)buf.getFormat();
           if (currentFormat == null) {
               System.out.println("currentFormat == null");
           }
           
           bi = new BufferedImage ( currentFormat.getSize().width,
                                                  currentFormat.getSize().height,
                                                  BufferedImage.TYPE_INT_RGB );
           if (bi == null) {
               System.out.println("bi == null");
           }

/*
           Image image = btoi.createImage ( buf );

           Graphics2D g2 = bi.createGraphics();
           g2.drawImage ( image, null, null );
 */          

           try
           {
               FileOutputStream out = null;
               filename = "myImage.jpeg";
               out = new FileOutputStream ( filename );
               JPEGImageEncoder encoder = JPEGCodec.createJPEGEncoder ( out );
               JPEGEncodeParam param = encoder.getDefaultJPEGEncodeParam ( bi );
               param.setQuality ( 1.0f, false );   // 100% high quality setting, no compression
               encoder.setJPEGEncodeParam ( param );
               encoder.encode ( bi );
               out.close();
           }
           catch ( Exception e )
           {
               System.out.println ("Error saving JPEG : " + e.getMessage());
               e.printStackTrace();
           }
//           player.close();
//           player.deallocate();

       }catch(Exception e) {
           System.err.println("U r Stupid..: " + e.getMessage());
           e.printStackTrace();
       }
   }

}

Αρχειοθετημένο

Αυτό το θέμα έχει αρχειοθετηθεί και είναι κλειστό για περαιτέρω απαντήσεις.

  • Δημιουργία νέου...