从相机显示当前图片 - 更新

时间:2011-01-17 09:50:21

标签: java

我想开发一个应用程序,它将从相机接收图片,然后将其保存在数据库中。这就是我想要做的事情:

拍摄照片时,会立即发送到程序(或程序必须读取当前拍摄的照片)然后显示。我会拍摄许多人或事物的照片,所以无论何时拍摄照片,我都希望看到节目中显示的当前照片。

如果我能看到一个示例应用程序,我已经google了,所以我知道可以这样我可以从头开始。但是找不到任何东西,所以我不确定是否有可能在java中做到这一点。

所以大家要求指导我如何在java中做到这一点。我只需要步骤,然后我将自己编程。

感谢。

更新

* 这是一个桌面应用程序(J2SE)。

* 摄像机将不断链接到运行应用程序的计算机,而目前通过电缆拍摄的照片(稍后可能是无线的)。

* 我将使用任何一个普通的数码相机

1 个答案:

答案 0 :(得分:0)

如果JMF(link)在您的系统上运行,则可以轻松地从流式视频中抓取照片。如果在Windows上运行,请检查此示例代码。 (Knowledge blog

import java.io.*;
import java.util.*;
import java.awt.*;
import java.awt.image.*;
import javax.imageio.*;
import javax.media.*;
import javax.media.control.*;
import javax.media.format.*;
import javax.media.util.*;


/**
 * Grabs a frame from a Webcam, overlays the current date and time, and saves the frame as a PNG to c:\webcam.png
 *
 * @author David
 * @version 1.0, 16/01/2004
 */
public class FrameGrab
{
    public static void main(String[] args) throws Exception
    {
        // Create capture device
        CaptureDeviceInfo deviceInfo = CaptureDeviceManager.getDevice("vfw:Microsoft WDM Image Capture (Win32):0");
        Player player = Manager.createRealizedPlayer(deviceInfo.getLocator());
        player.start();

        // Wait a few seconds for camera to initialise (otherwise img==null)
        Thread.sleep(3000);

        // Grab a frame from the capture device
        FrameGrabbingControl frameGrabber = (FrameGrabbingControl)player.getControl("javax.media.control.FrameGrabbingControl");
        Buffer buf = frameGrabber.grabFrame();

        // Convert frame to an buffered image so it can be processed and saved
        Image img = (new BufferToImage((VideoFormat)buf.getFormat()).createImage(buf));
        BufferedImage buffImg = new BufferedImage(img.getWidth(null), img.getHeight(null), BufferedImage.TYPE_INT_RGB);
        Graphics2D g = buffImg.createGraphics();
        g.drawImage(img, null, null);

        // Overlay curent time on image
        g.setColor(Color.RED);
        g.setFont(new Font("Verdana", Font.BOLD, 16));
        g.drawString((new Date()).toString(), 10, 25);

        // Save image to disk as PNG
        ImageIO.write(buffImg, "png", new File("c:\\webcam.png"));

        // Stop using webcam
        player.close();
        player.deallocate();
        System.exit(0);
    }
}