android照相的类函数,Android 照相机的实例应用

Android 照相机的实例应用

关键技术:

SurfaceHolder.Callback

public class MyCameraDemo extends Activity {

private SurfaceView surface = null ;

private Button but = null ;

private SurfaceHolder holder = null ;

private Camera cam = null ;

private boolean previewRunning = true ;

@Override

public void onCreate(Bundle savedInstanceState) {

super.onCreate(savedInstanceState);

super.setContentView(R.layout.main);

this.but = (Button) super.findViewById(R.id.but) ;

this.surface = (SurfaceView) super.findViewById(R.id.surface) ;

this.holder = this.surface.getHolder() ;

this.holder.addCallback(new MySurfaceViewCallback()) ;

//设置缓冲类型

this.holder.setType(SurfaceHolder.SURFACE_TYPE_PUSH_BUFFERS) ;

//设置分辨率

this.holder.setFixedSize(600, 350);

this.but.setOnClickListener(new OnClickListenerImpl()) ;

}

private class OnClickListenerImpl implements OnClickListener {

@Override

public void onClick(View v) {

if(MyCameraDemo.this.cam != null) {

//自动对焦

MyCameraDemo.this.cam.autoFocus(new AutoFocusCallbackImpl()) ;

}

}

}

private class MySurfaceViewCallback implements SurfaceHolder.Callback {

//当预览界面格式大小改变时,调用

public void surfaceChanged(SurfaceHolder holder, int format, int width,

int height) {

}

//初次实例化界面调用

public void surfaceCreated(SurfaceHolder holder) {

MyCameraDemo.this.cam = Camera.open(0) ; // 取得第一个摄像头

//窗口服务

WindowManager manager = (WindowManager) MyCameraDemo.this

.getSystemService(Context.WINDOW_SERVICE);

//取得display显示对象

Display display = manager.getDefaultDisplay() ;

//照相机参数

Parameters param = MyCameraDemo.this.cam.getParameters() ;

//将照相机预览大小设置为display大小

param.setPreviewSize(display.getWidth(), display.getHeight()) ;

param.setPreviewFrameRate(5) ; // 一秒5帧

param.setPictureFormat(PixelFormat.JPEG) ; // 图片形式

param.set("jpen-quality", 80) ;//图片质量,最高100

MyCameraDemo.this.cam.setParameters(param) ;

try {

MyCameraDemo.this.cam.setPreviewDisplay(MyCameraDemo.this.holder) ;

} catch (IOException e) {

}

MyCameraDemo.this.cam.startPreview() ; // 进行预览

MyCameraDemo.this.previewRunning = true ; // 已经开始预览

}

@Override

public void surfaceDestroyed(SurfaceHolder holder) {

if(MyCameraDemo.this.cam != null) {

if(MyCameraDemo.this.previewRunning) {

MyCameraDemo.this.cam.stopPreview() ; // 停止预览

MyCameraDemo.this.previewRunning = false ;

}

MyCameraDemo.this.cam.release() ;

}

}

}

private class AutoFocusCallbackImpl implements AutoFocusCallback {

@Override

public void onAutoFocus(boolean success, Camera camera) {

if(success) { // 成功

MyCameraDemo.this.cam.takePicture(sc, pc, jpgcall) ;

}

}

}

private PictureCallback jpgcall = new PictureCallback() {

@Override

public void onPictureTaken(byte[] data, Camera camera) { // 保存图片的操作

Bitmap bmp = BitmapFactory.decodeByteArray(data, 0, data.length);

String fileName = Environment.getExternalStorageDirectory()

.toString()

+ File.separator

+ "mldnphoto"

+ File.separator

+ "MLDN_" + System.currentTimeMillis() + ".jpg";

File file = new File(fileName) ;

if (!file.getParentFile().exists()) {

file.getParentFile().mkdirs() ; // 创建文件夹

}

try {

BufferedOutputStream bos = new BufferedOutputStream(new FileOutputStream(file)) ;

bmp.compress(Bitmap.CompressFormat.JPEG, 80, bos) ; // 向缓冲区之中压缩图片

bos.flush() ;

bos.close() ;

Toast.makeText(MyCameraDemo.this,

"拍照成功,照片已保存在" + fileName + "文件之中!", Toast.LENGTH_SHORT)

.show();

} catch (Exception e) {

Toast.makeText(MyCameraDemo.this,

"拍照失败!", Toast.LENGTH_SHORT)

.show();

}

MyCameraDemo.this.cam.stopPreview() ;

MyCameraDemo.this.cam.startPreview() ;

}

} ;

private ShutterCallback sc = new ShutterCallback(){

@Override

public void onShutter() {

// 按下快门之后进行的操作

}

} ;

private PictureCallback pc = new PictureCallback() {

@Override

public void onPictureTaken(byte[] data, Camera camera) {

}

} ;

}

主布局函数

xmlns:android="http://schemas.android.com/apk/res/android"

android:orientation="vertical"

android:layout_width="fill_parent"

android:layout_height="fill_parent">

android:id="@+id/but"

android:layout_width="fill_parent"

android:layout_height="wrap_content"

android:text="照相" />

android:id="@+id/surface"

android:layout_width="fill_parent"

android:layout_height="fill_parent" />

以上就是Android 相机的使用方法,如有疑问请留言或者到本站社区交流讨论,感谢阅读,希望能帮助到大家,谢谢大家对本站的支持!

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值