⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 powercamera.java

📁 J2ME开发精解源代码已经过调试成功
💻 JAVA
字号:
package com.j2medev.ch8.mmapi;import java.io.IOException;import javax.microedition.midlet.*;import javax.microedition.lcdui.*;import javax.microedition.media.*;import javax.microedition.media.control.VideoControl;public class PowerCamera extends MIDlet implements CommandListener{        private Display display = null;    private Displayable resume = null;    private List main = null;    private PowerModel pm = null;    private Player player = null;    private VideoControl vc = null;    public CaptureThread captureThread=null;    private Command exitCommand = new Command("退出",Command.EXIT, 1);    private Command captureCommand = new Command("拍照",Command.OK, 1);    private Command backCommand = new Command("返回",Command.BACK, 1);    public PowerCamera() {        captureThread=new CaptureThread();    }        public void showPlayerState(){        if(player==null)return;    int state=player.getState();    switch(state){        case Player.CLOSED:{        System.out.println("player=LOSED");        break;        }        case Player.PREFETCHED:{        System.out.println("player=PREFETCHED");        break;        }        case Player.REALIZED:{        System.out.println("player=REALIZED");        break;        }        case Player.STARTED:{        System.out.println("player=STARTED");        break;        }        case Player.UNREALIZED:{        System.out.println("player=UNREALIZED");        break;        }         default:            break;    }    }        public void startApp() {                if(display == null){            display = Display.getDisplay(this);            pm = new PowerModel(this);            main = new List("主菜单", List.IMPLICIT, new String[]{"手机拍照","我的相册"}, null);            main.addCommand(exitCommand);            main.setCommandListener(this);            resume = main;        }        display.setCurrent(resume);    }        public void setCurent(Displayable current){        display.setCurrent(current);    }    public void pauseApp() {        resume = display.getCurrent();    }        public void destroyApp(boolean unconditional) {        //退出程序,释放资源        pm.release();        releasePlayer();     }    public Display getDisplay() {        return display;    }        public void showCamera(){        boolean initFlag=true;        try{            //创建播放器            if(player == null){                player = Manager.createPlayer("capture://video");            }             //System.out.println(player.getState());            this.showPlayerState();            if(player.getState()==Player.STARTED)player.deallocate();                       if(player.getState()==Player.UNREALIZED) player.realize();                       //获得VideoControl            if(vc==null)            {            vc = (VideoControl)player.getControl("VideoControl");            initFlag=true;            }else initFlag=false;            //将捕获的数据绘制到Canvas上            CameraCanvas cc = new CameraCanvas(this, vc,initFlag);            cc.addCommand(captureCommand);            cc.addCommand(backCommand);            cc.setCommandListener(this);            display.setCurrent(cc);            player.start();        }catch(IOException ex){            ex.printStackTrace();            player =null;            vc = null;        } catch(MediaException ex){            ex.printStackTrace();            player =null;            vc = null;        }    }        public void capture(){        try{            //捕获数据 可以通过参数定制编码类型以及图片的长度和高度            byte[] imgData = vc.getSnapshot("encoding=jpeg&width=160&height=120");            ViewImageUI vimage = new ViewImageUI(this, imgData);            //显示图片,并让用户输入标题            display.setCurrent(vimage);            //player.close();            //player = null;            //vc = null;        }catch(MediaException ex){            showInfo(ex.toString(),AlertType.ERROR);        }    }        public void backToMain(){        display.setCurrent(main);    }        public void savePicture(Picture pic){        pm.savePicture(pic);    }    //错误提示    public void showInfo(String message,AlertType type){        Alert alert = new Alert("系统提示");        alert.setString(message);        alert.setTimeout(2000);        alert.setType(type);                display.setCurrent(alert, main);            }    //处理和用户交互的逻辑    public void commandAction(Command cmd,Displayable displayable){        if(cmd == exitCommand){            this.captureThread.stop();            this.captureThread=null;            this.releasePlayer();            destroyApp(false);            notifyDestroyed();        }else if(cmd == List.SELECT_COMMAND){            String label = main.getString(main.getSelectedIndex());            if(label.equals("手机拍照")){                //判断是否支持MMAPI                String support = PowerModel.isVideoCapture();                if(support.equals("true")){                    showCamera();                    if(captureThread==null){                        System.out.println("captureThread=null");                    captureThread=new CaptureThread();                    }                    //if(captureThread.isAlive())                    System.out.println(captureThread.isAlive());                    captureThread.start();                    System.out.println(captureThread.isAlive());                }else{                    showInfo("您的手机不支持拍照功能",AlertType.WARNING);                }            }else if(label.equals("我的相册")){                //一次读取Picture[]数组,这里对内存消耗很大                Picture[] pic = pm.getAllPicture();                if(pic == null){                    showInfo("相册为空", AlertType.INFO);                }else{                    ImageList list = new ImageList(this);                    list.initTitle(pic);                    display.setCurrent(list);                }            }        }else if(cmd == captureCommand){            try {                captureThread.StartCapture();            } catch (Exception e) {                e.printStackTrace();            }           // capture();        }else if(cmd == backCommand){            releasePlayer();            captureThread.stop();            this.captureThread=null;            backToMain();        }    }    //把播放器资源释放,系统可能需要使用    public void releasePlayer(){        if(player != null){            player.close();            player = null;        }if(vc != null){            vc = null;        }    }        public class CaptureThread extends Thread{        private boolean stop = false;        //private boolean CaptureDone = false;        public CaptureThread() {            stop = false;        }        public   void run() {                        while (!stop) {                    synchronized(this){                        try {                             System.out.println("captureThread等待.....");                            wait();                        } catch (InterruptedException ex) {                            ex.printStackTrace();                        }                    }                    if(stop==true)break;                capture();               }        }                public synchronized void StartCapture(){            System.out.println("StartCapture 唤醒captureThread");        notify();        }        public synchronized void stop(){        this.stop=true;        System.out.println("stop");        notify();        }            }}

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -