📄 cameracanvas.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 + -