(lab2) 카메라 에 비춘 콜라뚜껑으로 마우스 컨트롤하기.
lab2 :카메라 에 비춘 콜라뚜껑으로 마우스 컨트롤하기.
사용한거 : JMF, 개인용 라브러리
배 경 : 주말동안 심심해서 .

상속받은 FrameFrame 클래스의 기본 flow 흐름은
onBeforeProcess();
onViewSetting();
onDataSetting();
onAddListener();
차례대로입니다.
onBeforeProcess();
onViewSetting();
onDataSetting();
onAddListener();
차례대로입니다.
기본 프로그램만 올려드려요 흐름만 ^^
package com.cam;
import java.awt.BorderLayout;
import java.awt.Color;
import java.awt.Component;
import java.awt.Dimension;
import java.awt.Graphics2D;
import java.awt.Image;
import java.awt.Point;
import java.awt.Toolkit;
import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;
import java.awt.image.BufferedImage;
import java.awt.image.ImageObserver;
import java.util.ArrayList;
import javax.media.CaptureDeviceInfo;
import javax.media.Format;
import javax.media.Player;
import javax.media.control.FormatControl;
import javax.media.format.VideoFormat;
import javax.swing.JButton;
import javax.swing.JLabel;
import javax.swing.JOptionPane;
import javax.swing.JToolBar;
import javax.swing.border.EtchedBorder;
import com.kdn.gui.frame.FrameFrame;
import com.kdn.util.image.ImageUtil;
import com.kdt.util.Utilities;
import com.kdt.util.schedule.Scheduler;
import com.khm.gui.component.ImageView;
import com.khm.io.jmf.camera.CameraUtil;
import com.khm.util.file.FileUtilKHM;
import com.khm.util.io.mouse.MouseUtil;
public class CamTest extends FrameFrame {
public static enum VIEWID {
PLAYER_COMPONENT("PLAYER_COMPONENT"),
STATUS_PANEL("STATUS_PANEL"),
CHANGEFORMAT_BTN("CHANGEFORMAT_BTN") ,
IMAGE_COMPONENT("IMAGE_COMPONENT") ,
CAPTURE_BTN("CAPTURE_BTN")
;
String id;
VIEWID(String id) {
this.id = id;
}
public String getValue() {
return this.id;
}
};
public static enum ACTION{
CAPTURE(Utilities.getNextNumber()) ;
int id;
ACTION(int id){
this.id=id;
}
public int getValue(){
return this.id;
}
};
private Player player =null;
private Format[] formats =null;
public CamTest(String title) {
super(title);
flow();
}
@Override
public void onViewSetting() {
setSize ( 800, 600 ); // default size...
setLayout ( new BorderLayout() );
JLabel statusBar = new JLabel (""){
public Dimension getPreferredSize ( )
{
return ( new Dimension ( 10, super.getPreferredSize().height ) );
}
};
statusBar.setName(VIEWID.STATUS_PANEL.getValue());
statusBar.setBorder ( new EtchedBorder() );
add ( statusBar, BorderLayout.SOUTH );
Image img= Toolkit.getDefaultToolkit().getImage("c:\\bb.jpg");
ImageView iv = new ImageView(img);
iv.setName(VIEWID.IMAGE_COMPONENT.getValue());
iv.setPreferredSize(new Dimension(320, 240 ));
add (iv, BorderLayout.EAST);
JToolBar toolbar = new JToolBar();
toolbar.setFloatable(false);
JButton capturebtn = new JButton("capture");
capturebtn.setName(VIEWID.CAPTURE_BTN.getValue());
JButton changeformatbtn= new JButton("changeformat");
changeformatbtn.setName(VIEWID.CHANGEFORMAT_BTN.getValue());
toolbar.add(changeformatbtn);
toolbar.add(capturebtn);
add ( toolbar, BorderLayout.NORTH );
ArrayList list = CameraUtil.getCameraList();
for (int i = 0; i < list.size(); i++) {
CaptureDeviceInfo deviceinfo = list.get(i);
formats = list.get(i).getFormats();
statusBar.setText(deviceinfo.getName());
System.out.println(deviceinfo.getName());
for (int j = 0; j
VideoFormat format = (VideoFormat)formats[j];
System.out.println(format.getSize()+" "+format+format.getClass().getName()+" "+ format.getClass().getSimpleName());
}
try{
player = CameraUtil.getPlayer(deviceinfo);
player.start();
Component playerComponent = player.getVisualComponent();
playerComponent.setName(VIEWID.PLAYER_COMPONENT.getValue());
add ( playerComponent, BorderLayout.CENTER );
invalidate();
pack();
}catch (Exception e) {
System.err.println ("Error : Could not get visual component");
e.printStackTrace();
}
}
setVisible(true);
}
@Override
public void onDataSetting() {
}
@Override
public void onAction(int gb, Object o) {
}
@Override
public void onAddListener() {
JButton capture_btn = (JButton) getComponent(VIEWID.CAPTURE_BTN.getValue());
capture_btn.addActionListener(new ActionListener() {
public void actionPerformed(ActionEvent e) {
Image image = CameraUtil.getImage(player);
BufferedImage bi = ImageUtil.toBufferedImage ( image);
Graphics2D g2 = bi.createGraphics();
g2.drawImage ( image, null, null );
try{
FileUtilKHM.writeFile("c:\\b.jpg", bi, "jpg");
}catch (Exception e1) {
e1.printStackTrace();
}
}
});
JButton changeformat_btn = (JButton) getComponent(VIEWID.CHANGEFORMAT_BTN.getValue());
changeformat_btn.addActionListener(new ActionListener() {
public void actionPerformed(ActionEvent e) {
Object selected = JOptionPane.showInputDialog (context,
"Select Video format",
"Capture format selection",
JOptionPane.INFORMATION_MESSAGE,
null, // Icon icon,
formats, // videoFormats,
formats[0] );
if ( selected != null ){
VideoFormat format =(VideoFormat) selected;
System.out.println(format);
player.stop();
Component playerComponent = (Component) getComponent(VIEWID.PLAYER_COMPONENT.getValue());
FormatControl formatControl = CameraUtil.getFormatControl(player);
formatControl.setFormat(format);
playerComponent.setName(VIEWID.PLAYER_COMPONENT.getValue());
player.start();
playerComponent.setPreferredSize(format.getSize());
invalidate();
pack();
}
}
});
Runnable run= new Runnable() {
public void run() {
try{
ImageView imgview = (ImageView) getComponent(VIEWID.IMAGE_COMPONENT.getValue());
Image image = CameraUtil.getImage(player);
BufferedImage bi = ImageUtil.toBufferedImage ( image);
ArrayList pointlist=new ArrayList();
for (int x = 0; x < bi.getWidth(); x++) {
for (int y = 0; y < bi.getHeight(); y++) {
Color color = new Color(bi.getRGB(x, y));
if(color.getRed()>100){
if(color.getGreen()<50 && color.getBlue()<50){
pointlist.add(new Point(x,y));
}
}
}
}
Graphics2D g2 = bi.createGraphics();
g2.drawImage ( image, null, null );
for (int i = 0; i < pointlist.size(); i++) {
if(i+1>=pointlist.size())
break;
Point point1 = pointlist.get(i);
Point point2 = pointlist.get(i+1);
g2.drawLine((int)point1.getX(),(int)point1.getY(), (int)point2.getX(), (int)point2.getY());
MouseUtil.move(point1);
}
imgview.setImage(image);
imgview.repaint();
}catch (Exception e) {
e.printStackTrace();
}
}
};
try {
scheduler.schedule("loop", run, 1000,100);
} catch (Exception e1) {
e1.printStackTrace();
}
}
Scheduler scheduler = new Scheduler();
@Override
public void dispose() {
if(scheduler!=null){
scheduler.cancel();
}
if ( player != null )
{
player.close();
player.deallocate();
player = null;
}
super.dispose();
}
protected void finalize ( ) throws Throwable
{
if ( player != null )
{
player.close();
player.deallocate();
player = null;
}
super.finalize();
}
public static void main(String[] args) {
CamTest myWebCam = new CamTest ( "Web Cam Capture" );
}
}