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

📄 cameracanvas.java

📁 基于Eclipse开发环境的J2ME motorola智能手机(E6)摄像头控制程序
💻 JAVA
字号:
import javax.microedition.lcdui.*;
import javax.microedition.media.*;
import javax.microedition.media.control.*;
import java.io.IOException;

public class cameraCanvas extends Canvas implements  CommandListener,Runnable
{
	Player p;
	VideoControl vc;
	int flag=0;
	
	boolean FullScreen = true;//拍摄时是否全屏显示
 
	int mintMode = VideoControl.USE_DIRECT_VIDEO;//默认模式

	String mstrSnapshot = null;//文件格式,null时是PNG

	boolean mblnSnapshot = false;//是否需要拍照

	Command cmdSnapshot = new Command("拍照",Command.ITEM,0);
	Command cmdBack = new Command("返回",Command.BACK,0);

	Image imgSnapshot = null;

	Camera midlet;
    
    /* Creates a new instance of cameraCanvas */
	public cameraCanvas(Camera m)   
	{
		midlet = m;       
		try
		{
			p = Manager.createPlayer("capture://video");
			p.realize();
			vc = (VideoControl) p.getControl("VideoControl");
			if (vc != null) 
			{
				vc.initDisplayMode(mintMode, this);
			}
		
			p.start();
		}
		catch(Exception e)
		{
			System.out.println("init Error:"+e.toString());
		}
    
        try 
        { 
        	vc.setDisplayFullScreen(true);
           // vc.setDisplaySize(240,60);
        }
        catch (MediaException me2) 
        {
    	   
        }
        
        vc.setVisible(true);          
        
        addCommand(cmdSnapshot);
        addCommand(cmdBack);
        
        setCommandListener(this);
        
        (new Thread(this)).start();//启动cameraCanvas线程

  }

      public void run()//线程运行函数
      {
    	  while(true)
    	  {
    		  try
    		  {
    			  Thread.sleep(100);
    		  }
    		  catch(Exception e)
    		  {
    			  
    		  }
    		     	
      		  if(this.FullScreen == false)//左键按下
      			this.setFullScreenMode(false);
        		  
        		  else if(this.FullScreen == true)//右键按下
        			this.setFullScreenMode(true);
        	        		  
    		  
    		  if(mblnSnapshot)
    		  {
    			  imgSnapshot = getImage();
    		  }
    		  
    		  if(flag==1)
    		  {
    			  p.close();
    		  }
 
    	  }
      }
   
  
      public void paint(Graphics g)
      {
	
    	  g.setColor(0xFFFFFF);
    	  g.fillRect(0,0,getWidth(),getHeight());
    	  
    	  if(imgSnapshot!=null)
    	  {
               int argb[]; 
               char imagedata[],temp1;              
               argb = new int[imgSnapshot.getWidth()*imgSnapshot.getHeight()];
               imagedata=new char[imgSnapshot.getWidth()*imgSnapshot.getHeight()];
               imgSnapshot.getRGB(argb,0,imgSnapshot.getWidth(),0,0,imgSnapshot.getWidth(),imgSnapshot.getHeight());//获得图片的ARGB值
               int i;
               double temp;
               int red,green,blue;
               
               //存取灰度值
               for( i=0;i<argb.length;i++)
               {
            	   red = (argb[i] & 0x00ff0000)>>16;//获得red值
            	   green = (argb[i] & 0x0000ff00)>>8;//获得green值
            	   blue = argb[i] & 0x000000ff;//获得blue值
            	   temp=red*0.299+green*0.588+blue*0.114;
            	   temp1=(char)temp;
            	   imagedata[i]=temp1;
               }
                             
               //显示灰度     
               for( i=0;i<imagedata.length;i++)   
               { 
            	   red = imagedata[i]<<16;
            	   green = imagedata[i]<<8;
            	   blue = imagedata[i];
            	   argb[i] = 0xff000000|red|green|blue;//合并3个色彩            
               }
                        
                g.setColor(0);
                g.drawRGB(argb,0,imgSnapshot.getWidth(),0,0,imgSnapshot.getWidth(),imgSnapshot.getHeight(),true);// 画象素数
          
    	  }//if

    	  String[] strInfo = 
    	  {
			"getDisplayWidth:" + vc.getDisplayWidth(),
			"getDisplayHeight:" + vc.getDisplayHeight(),
			"getSourceWidth:" + vc.getSourceWidth(),
			"getSourceHeight:" + vc.getSourceHeight()
    	  };
		
    	  vc.setVisible(true);
    	  g.setColor(0x0);
    	  
    	  for(int i=0;i<strInfo.length;i++)              
    	  {
		//		g.drawString(strInfo[i],0,vc.getDisplayY()+vc.getDisplayHeight()+i*Font.getDefaultFont().getHeight(),20);
    		  	g.drawString(strInfo[i],0,120+i*20,20);
           }
 
	

                
      }
      

      protected void keyPressed(int keyCode)//按键响应函数
      {
    	  switch (keyCode)
    	  {
    	  	case -3://左键
    	  		FullScreen = false;
    	  		System.out.println("keyCode=" + keyCode);
    	  		break;
    	  		
    	  	case -4://右键
    	  		FullScreen = true;
    	  		System.out.println("keyCode=" + keyCode);
    	  		break;
    	  		
    	  	default:
    	  		break;
    	  		
    	  }
      }


      public void commandAction(Command cmd,Displayable dis)//命令按钮响应
      {
      
    	  try
    	  {
    		  if(cmd.equals(cmdSnapshot))
               {
                  mblnSnapshot=true;  
                  flag=1; 
                  repaint();
                             
               }
                    
                else if(cmd.equals(cmdBack))
                {
                	midlet.display.setCurrent(midlet.lstMenu);
                	vc = null;
                	p.close();
                	p = null;
                }
    	  }
    	  catch(Exception e)
    	  {
    		  
    	  }
    
      }

	//拍一张照片并返回
      Image getImage()
      {
    	  byte[] RGB;
    	  Image img=null;
    	  
    	  if(mblnSnapshot)
    	  {
    		  mblnSnapshot = false;
    		  
    		  try 
    		  {
    			  RGB = vc.getSnapshot("encoding=jpeg&width=320&height=240");
    			  img = Image.createImage(RGB, 0, RGB.length);
    		  }
		    
    		  catch (Exception e) 
    		  {
    			  System.out.println("get image error:"+e.toString());
    		  }
    	  }
            
    	  return img;
      }
        
    
}


       

⌨️ 快捷键说明

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