<uses-permission android:name="android.permission.WRITE_EXTERNAL_STORAGE" />
In my manifest.
Using java Syntax Highlighting
- package ece473.hw03;
- import java.io.File;
- import java.io.FileOutputStream;
- import java.io.FileWriter;
- import java.io.IOException;
- import java.io.OutputStream;
- import android.app.Activity;
- import android.graphics.Bitmap;
- import android.graphics.BitmapFactory;
- import android.graphics.PixelFormat;
- import android.graphics.Bitmap.CompressFormat;
- import android.os.Bundle;
- import android.os.Environment;
- import android.view.MotionEvent;
- import android.view.SurfaceHolder;
- import android.view.SurfaceView;
- import android.view.View;
- import android.view.Window;
- import android.view.WindowManager;
- import android.view.View.OnTouchListener;
- import android.hardware.Camera;
- import android.hardware.Camera.Size;
- public class CameraView extends Activity
- implements SurfaceHolder.Callback, OnTouchListener {
- protected SurfaceView mSurfaceView;
- protected SurfaceHolder mSurfaceHolder;
- protected boolean mPreviewRunning = false;
- protected static Camera mCamera;
- protected Camera.PictureCallback mPictureCallback;
- @Override
- public void onCreate(Bundle savedInstanceState) {
- super.onCreate(savedInstanceState);
- getWindow().setFormat(PixelFormat.TRANSLUCENT);
- requestWindowFeature(Window.FEATURE_NO_TITLE);
- getWindow().setFlags(WindowManager.LayoutParams.FLAG_FULLSCREEN,
- WindowManager.LayoutParams.FLAG_FULLSCREEN);
- setContentView(R.layout.camera_surface);
- mSurfaceView = (SurfaceView) findViewById(R.id.surface_camera);
- mSurfaceHolder = mSurfaceView.getHolder();
- mSurfaceHolder.addCallback(this);
- mSurfaceHolder.setType(SurfaceHolder.SURFACE_TYPE_PUSH_BUFFERS);
- mPictureCallback = new Camera.PictureCallback() {
- public void onPictureTaken(byte[] imageData, Camera c) {
- String dirpath = Environment.getExternalStorageDirectory().getAbsolutePath();
- try{
- Bitmap image = BitmapFactory.decodeByteArray(imageData, 0, imageData.length);
- String fname = "capture.jpg";
- FileOutputStream outputStream = null;
- File dir = new File(dirpath);
- if (!dir.exists()) dir.mkdirs();
- File file = new File(dirpath, fname);
- outputStream = new FileOutputStream(file);
- image.compress(CompressFormat.JPEG, 100, outputStream);
- outputStream.flush();
- outputStream.close();
- }catch(Exception e){
- }
- }
- };
- }
- @Override
- public void surfaceChanged(SurfaceHolder holder, int format, int w, int h) {
- // TODO Auto-generated method stub
- if (mPreviewRunning) {
- mCamera.stopPreview();
- }
- Camera.Parameters p = mCamera.getParameters();
- p.setPreviewSize(w, h);
- mCamera.setParameters(p);
- try {
- mCamera.setPreviewDisplay(holder);
- } catch (IOException e) {
- e.printStackTrace();
- }
- mCamera.startPreview();
- mPreviewRunning = true;
- }
- @Override
- public void surfaceCreated(SurfaceHolder holder) {
- // TODO Auto-generated method stub
- mCamera = Camera.open();
- }
- @Override
- public void surfaceDestroyed(SurfaceHolder holder) {
- // TODO Auto-generated method stub
- mCamera.stopPreview();
- mPreviewRunning = false;
- mCamera.release();
- }
- @Override
- public boolean onTouchEvent(MotionEvent event) {
- mCamera.takePicture(null, mPictureCallback, mPictureCallback);
- //mCamera.startPreview();
- return true;
- }
- @Override
- public boolean onTouch(View v, MotionEvent event) {
- // TODO Auto-generated method stub
- return false;
- }
- }
Parsed in 0.047 seconds, using GeSHi 1.0.8.4
Am I clearly doing something wrong? I've tried several ways of saving the image, from writing it directly in the filestream to using the bitmap factory.


