`
yangsongjing
  • 浏览: 244333 次
  • 性别: Icon_minigender_1
  • 来自: 湖南
社区版块
存档分类
最新评论

手机照相程序

阅读更多

package com.icss.test_take_picture;

import java.io.File;
import java.io.FileNotFoundException;
import java.io.FileOutputStream;
import java.io.IOException;

import android.app.Activity;
import android.app.AlertDialog;
import android.content.DialogInterface;
import android.graphics.Bitmap;
import android.graphics.BitmapFactory;
import android.graphics.PixelFormat;
import android.graphics.Bitmap.CompressFormat;
import android.hardware.Camera;
import android.hardware.Camera.PictureCallback;
import android.os.Bundle;
import android.os.Environment;
import android.view.SurfaceHolder;
import android.view.SurfaceView;
import android.view.View;
import android.view.Window;
import android.view.WindowManager;
import android.view.SurfaceHolder.Callback;
import android.widget.Button;
import android.widget.EditText;
import android.widget.ImageView;
import android.widget.Toast;

public class MainActivity extends Activity {
 private SurfaceView sf1;
 private Button bt1;
 private SurfaceView surfaceview;
 private SurfaceHolder surfaceholder;
 
 private Camera camera;
 private boolean isPreview=false;
 @Override
    public void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.main);
       
        sf1=(SurfaceView)findViewById(R.id.sf1);
        bt1=(Button)findViewById(R.id.bt1);
        //设置手机屏幕为全屏
        this.requestWindowFeature(Window.FEATURE_NO_TITLE); //无标题
        this.getWindow().setFlags(WindowManager.LayoutParams.FLAG_FULLSCREEN, WindowManager.LayoutParams.FLAG_FULLSCREEN);
        //拍照时,屏幕高亮度
        this.getWindow().addFlags(WindowManager.LayoutParams.FLAG_KEEP_SCREEN_ON);
       
        surfaceholder=sf1.getHolder();  //从view中取出holder
        surfaceholder.setFixedSize(170, 170);   //设置分辨率
        surfaceholder.setType(SurfaceHolder.SURFACE_TYPE_PUSH_BUFFERS);   //设置不缓冲数据
       
        final PictureCallback jpeg=new PictureCallback() {
   @Override//当你照了一张照片的时候
   public void onPictureTaken(byte[] data, Camera camera) {
    final Bitmap bitmap=BitmapFactory.decodeByteArray(data, 0, data.length);
    //根据dialog的布局文件创建一个视图
    View dialog=getLayoutInflater().inflate(R.layout.dialog, null);
    ImageView imageview=(ImageView)dialog.findViewById(R.id.imageview);
    imageview.setImageBitmap(bitmap);
    
    final EditText filename=(EditText)dialog.findViewById(R.id.filename);
    
    new AlertDialog.Builder(MainActivity.this).setView(dialog).setNegativeButton("取消", null).setPositiveButton("确定保存", new DialogInterface.OnClickListener() {
     
     @Override
     public void onClick(DialogInterface dialog, int which) {
      //保存图片
      if(Environment.getExternalStorageState().equals(Environment.MEDIA_MOUNTED)){
       File f=new File(Environment.getExternalStorageDirectory(),filename.getText().toString());
          try {
        FileOutputStream fos=new FileOutputStream(f);
        bitmap.compress(CompressFormat.JPEG, 100,fos);
        fos.flush();
        fos.close();
        Toast.makeText(MainActivity.this, "保存图片成功", Toast.LENGTH_LONG).show();
       } catch (FileNotFoundException e) {
        e.printStackTrace();
       } catch (IOException e) {
        e.printStackTrace();
       }
         
      }
     }
    }).show();
   }
  };
  bt1.setOnClickListener(new View.OnClickListener() {
   
   @Override
   public void onClick(View v) {
    if(camera!=null){
     camera.takePicture(null, null, jpeg);
    }
   }
  });
  //设置surfacehodler的回调方法,用来根据srufaceview的状态来控制camera
  
  surfaceholder.addCallback(new Callback(){

   @Override
   public void surfaceChanged(SurfaceHolder holder, int format, int width,
     int height) {
    
   }

   @Override
   public void surfaceCreated(SurfaceHolder holder) {
    initCamera();
   }
   
   
   

   @Override
   public void surfaceDestroyed(SurfaceHolder holder) {
    if(camera!=null){
     if(isPreview==true){   //还在预览状态
      camera.stopPreview();    //取消预览
     }
     camera.release();
     camera=null;
    }

   }
   
  });
    }
  //打开camera
 protected void initCamera() {
     if(!isPreview){
      camera=Camera.open();
     }
     if(camera!=null&&!isPreview){
      try {
    //将camera当前拍到图像显示到surfaceview中去
       Camera.Parameters parameters=camera.getParameters();   //取出camera的参数对象
       //设置每秒显示多少帧
       parameters.setPreviewFrameRate(3);
       //设置图片的大小
       parameters.setPictureSize(300, 300);
       //设置拍出的图片的格式
       parameters.setPictureFormat(PixelFormat.JPEG);
       parameters.setPreviewSize(300, 300);
      
       //将上面的parameters参数设置到camera中
       camera.setParameters(parameters);
      
       //下一步将camera的图像设置到surfaceview中
       camera.setPreviewDisplay(surfaceholder);
       ///下面开始预览
       camera.startPreview();
      
       //自动对焦
       camera.autoFocus(null);
   } catch (IOException e) {
    e.printStackTrace();
   }
     
     }
 }

}

 

 

 

必须得配权限 重点是3个回调  !

 

 

 

 

 

 

 

分享到:
评论

相关推荐

Global site tag (gtag.js) - Google Analytics