我想开发一个应用程序,它将从相机接收图片,然后将其保存在数据库中。这就是我想要做的事情:
拍摄照片时,会立即发送到程序(或程序必须读取当前拍摄的照片)然后显示。我会拍摄许多人或事物的照片,所以无论何时拍摄照片,我都希望看到节目中显示的当前照片。
如果我能看到一个示例应用程序,我已经google了,所以我知道可以这样我可以从头开始。但是找不到任何东西,所以我不确定是否有可能在java中做到这一点。
所以大家要求指导我如何在java中做到这一点。我只需要步骤,然后我将自己编程。
感谢。
更新
* 这是一个桌面应用程序(J2SE)。
* 摄像机将不断链接到运行应用程序的计算机,而目前通过电缆拍摄的照片(稍后可能是无线的)。
* 我将使用任何一个普通的数码相机
答案 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);
}
}