Android_拍照功能
import java.io.File; import java.io.FileOutputStream; import java.io.IOException; import android.app.Activity; import android.content.Context; 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.Parameters; import android.hardware.Camera.PictureCallback; import android.os.Bundle; import android.os.Environment; import android.util.Log; import android.view.Display; import android.view.KeyEvent; import android.view.SurfaceHolder; import android.view.SurfaceView; import android.view.Window; import android.view.WindowManager; import android.view.SurfaceHolder.Callback; public class TakePicActivity extends Activity { private static final String TAG = "TakePicActivity"; private SurfaceView surfaceView; private Camera camera; private boolean preview; @Override public void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); Window window = this.getWindow(); // 设置窗口没有标题 this.requestWindowFeature(Window.FEATURE_NO_TITLE); // 设置窗口全屏显示 window.setFlags(WindowManager.LayoutParams.FLAG_FULLSCREEN, WindowManager.LayoutParams.FLAG_FULLSCREEN); // 设置窗口高亮 window.addFlags(WindowManager.LayoutParams.FLAG_KEEP_SCREEN_ON); setContentView(R.layout.main); surfaceView = (SurfaceView) this.findViewById(R.id.surfaceView); surfaceView.getHolder().setFixedSize(176, 144); surfaceView.getHolder() .setType(SurfaceHolder.SURFACE_TYPE_PUSH_BUFFERS); surfaceView.getHolder().addCallback(new SurfaceCallBack()); } private final class SurfaceCallBack implements Callback { @Override public void surfaceChanged(SurfaceHolder holder, int format, int width, int height) { } @Override public void surfaceCreated(SurfaceHolder holder) { try { camera = Camera.open(); // 获得窗口管理器 WindowManager wm = (WindowManager) getSystemService(Context.WINDOW_SERVICE); // 获得屏幕 Display display = wm.getDefaultDisplay(); // 获得屏幕参数对象 Parameters parameters = camera.getParameters(); // 设置预览照片的大小 parameters.setPreviewSize(display.getWidth(), display .getHeight()); // 每秒3帧从取景框中获得画片 parameters.setPreviewFrameRate(3); // 设置照片的输出格式 parameters.setPictureFormat(PixelFormat.JPEG); // 设置照片质量 parameters.set("jpeg-quality", 85); // 设置排出来的照片的大小 parameters.setPictureSize(display.getWidth(), display .getHeight()); camera.setParameters(parameters); // 通过SurfaceView显示取景画面 camera.setPreviewDisplay(surfaceView.getHolder()); // 开始预览 camera.startPreview(); preview = true; } catch (IOException e) { Log.e(TAG, e.toString()); } } @Override public void surfaceDestroyed(SurfaceHolder holder) { if (camera != null) { if (preview) { camera.stopPreview(); preview = false; } camera.release(); } } } @Override public boolean onKeyDown(int keyCode, KeyEvent event) { // 单击案件 if (camera != null && event.getRepeatCount() == 0) { switch (keyCode) { case KeyEvent.KEYCODE_SEARCH: // 设置自动对焦 camera.autoFocus(null); break; case KeyEvent.KEYCODE_CAMERA: case KeyEvent.KEYCODE_DPAD_CENTER: camera.takePicture(null, null, new TakePicCallBack()); break; default: break; } } //返回true会阻止事件向上传递 return true; } private final class TakePicCallBack implements PictureCallback { @Override public void onPictureTaken(byte[] data, Camera camera) { try { Bitmap bitmap = BitmapFactory.decodeByteArray(data, 0, data.length); File file = new File(Environment.getExternalStorageDirectory(), System.currentTimeMillis() + ".jpg"); FileOutputStream fos = new FileOutputStream(file); bitmap.compress(CompressFormat.JPEG, 100, fos); fos.close(); camera.stopPreview(); camera.startPreview(); } catch (Exception e) { Log.e(TAG, e.toString()); } } } }
***万事万物都有裂痕,那是光照进来的地方***

浙公网安备 33010602011771号