public class Preview extends SurfaceView implements
SurfaceHolder.Callback {
        SurfaceHolder mHolder;
        Camera mCamera;

        Preview(Context context) {
                super(context);
                mHolder = getHolder();
                mHolder.addCallback(this);
                mHolder.setType(SurfaceHolder.SURFACE_TYPE_PUSH_BUFFERS);
        }

            public void surfaceCreated(SurfaceHolder holder) {
                                mCamera = Camera.open();
                Camera.Parameters parameters=mCamera.getParameters();
           parameters.setPictureFormat(PixelFormat.JPEG);
            parameters.setPictureSize(420, 320);
                mCamera.setParameters(parameters);

                mCamera.setPreviewCallback(previewCallback);
                 mCamera.takePicture(shutterCallback, pictureCallback,
                  jpegPictureCallback);
                try {
                        mCamera.setPreviewDisplay(holder);
                } catch (IOException e) {

                        e.printStackTrace();
                }
        }


        private PreviewCallback previewCallback = new PreviewCallback() {

                @Override
                public void onPreviewFrame(byte[] data, Camera camera) {

                        Log.i("Preview", "onPreviewFrame");
                }

        };

        int i = 0;
        private ShutterCallback shutterCallback = new ShutterCallback() {

                @Override
                public void onShutter() {

                        Log.i("Preview", "onShutter");
                        if (++i > 1) {
                                mCamera.stopPreview();
                        }
                }

        };

        private PictureCallback pictureCallback = new PictureCallback() {

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

                        Log.i("Preview", "onPictureTaken");
                }

        };

        private byte[] picData;
        private PictureCallback jpegPictureCallback = new PictureCallback() {

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

                        picData = data;
                        Log.i("Preview", "onPictureTaken jpeg");
                }

        };

        public String getPicture() throws IOException {
                //mCamera.takePicture(shutterCallback,pictureCallback,
jpegPictureCallback);
                mCamera.takePicture(shutterCallback, pictureCallback,
                                jpegPictureCallback);
                if (picData == null) {
                        return null;
                }
                int bytelength=picData.length;
                int length=1024;
                 String dataString = new SimpleDateFormat("yyyy-mm-dd
HH:mm:ss").format(Calendar.getInstance().getTime());
                 dataString=dataString.replaceAll("\\s", "");
                 dataString=dataString.replaceAll(":", "");

                    String pathString="/sdcard/"+dataString+".jpg";

                FileOutputStream fos = null;
                        try {
                                  fos=new FileOutputStream(pathString);
                                   int offset=0;
                                  while(offset+length<bytelength){
                                          fos.write(picData, offset, length);
                                          offset+=length;
                                  }
                                  fos.write(picData, offset, bytelength-offset);

                        } catch (Exception e) {
                                 Log.e("ww",e.toString());
                        }finally{
                                        fos.close();
                        }



                return pathString;
        }

        public void cancel() {
                mCamera.stopPreview();
                mCamera.release();
                mCamera = null;
        }

        public void surfaceDestroyed(SurfaceHolder holder) {
                // Surface will be destroyed when we return, so stop the
                // preview.
                // Because the CameraDevice object is not a shared resource,
                // it's very
                // important to release it when the activity is paused.
                if (mCamera != null) {
                        mCamera.stopPreview();
                        mCamera = null;
                }
        }

        public void surfaceChanged(SurfaceHolder holder, int format, int w,
int h) {
                // Now that the size is known, set up the camera parameters
                // and begin
                // the preview.
                Camera.Parameters parameters = mCamera.getParameters();
                parameters.setPreviewSize(w, h);
                mCamera.setParameters(parameters);
                mCamera.startPreview();
        }

}


And when  toggle a breakpoint in the private ShutterCallback
shutterCallback = new ShutterCallback(),it hasn't been implemented.
So when I invoke the getPicture outside ,the picture is black and the
pisdata is null.
Why this happen?Where did i do wrong?

--~--~---------~--~----~------------~-------~--~----~
You received this message because you are subscribed to the Google
Groups "Android Developers" group.
To post to this group, send email to [email protected]
To unsubscribe from this group, send email to
[email protected]
For more options, visit this group at
http://groups.google.com/group/android-developers?hl=en
-~----------~----~----~----~------~----~------~--~---

Reply via email to