Toss Atom
Toss Atom

Reputation: 1

Android Application : display image

i'm working on a android application and I have to take a picture and save it. It's working and my picture is saved in a directory of the phone. Especially, in Picture directory.

So, here its my class parameter with the button to launch the camera ( new activity) and take the picture :

  public class Parametre extends Activity {

    private EditText ETpseudo= null;
    private Button buttonPhoto = null;


    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.parametres);

        ETpseudo =(EditText) findViewById(R.id.editPseudo);
        buttonPhoto = (Button) findViewById(R.id.buttonPhoto);

        //ivPhoto.setImageBitmap();

        buttonPhoto.setOnClickListener(new View.OnClickListener() {

            @Override
            public void onClick(View v) {
                startActivity(new Intent(Parametre.this, CameraActivity.class));
            }
        });       

    }

}

CameraActivity :

  public class CameraActivity extends Activity {

    private Camera mCamera;
    private CameraPreview mCameraPreview;
    private ImageView cadrePhoto = null;


    public void onRequestPermissionsResult(int requestCode, String[] permissions, int[] grantResults) {
        Log.d("DEBUG", String.valueOf(grantResults[0]));
        startCamera();
    }

    @Override
    public void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.camera);

        Button captureButton = (Button) findViewById(R.id.button_capture);

        startCamera();

        captureButton.setOnClickListener(new View.OnClickListener() {
            @Override
            public void onClick(View v) {
                mCamera.takePicture(null, null, mPicture);
            }
        });
    }

    private void startCamera(){

        mCamera = getCameraInstance();
        mCamera.startPreview();
        mCameraPreview = new CameraPreview(this, mCamera);
        FrameLayout preview = (FrameLayout) findViewById(R.id.camera_preview);
        preview.addView(mCameraPreview);
        setCameraDisplayOrientation(this, 1, mCamera);
    }

    /**
     * Helper method to access the camera returns null if it cannot get the
     * camera or does not exist
     *
     * @return
     */
    @TargetApi(Build.VERSION_CODES.GINGERBREAD)
    private Camera getCameraInstance() {
        Camera camera = null;
        try {
            camera = Camera.open(1);
        } catch (Exception e) {
            e.printStackTrace();
        }
        return camera;
    }


    @TargetApi(Build.VERSION_CODES.GINGERBREAD)
    public void setCameraDisplayOrientation(Activity activity, int cameraId,android.hardware.Camera camera) {

        android.hardware.Camera.CameraInfo info = new android.hardware.Camera.CameraInfo();
        android.hardware.Camera.getCameraInfo(cameraId, info);
        int rotation = activity.getWindowManager().getDefaultDisplay().getRotation();
        int degrees = 0;
        switch (rotation) {
            case Surface.ROTATION_0:
                degrees = 0;
                break;
            case Surface.ROTATION_90:
                degrees = 90;
                break;
            case Surface.ROTATION_180:
                degrees = 180;
                break;
            case Surface.ROTATION_270:
                degrees = 270;
                break;
        }
        int result;
        if (info.facing == Camera.CameraInfo.CAMERA_FACING_FRONT) {
            result = (info.orientation + degrees) % 360;
            result = (360 - result) % 360;  // compensate the mirror
        } else {  // back-facing
            result = (info.orientation - degrees + 360) % 360;
        }
        camera.setDisplayOrientation(result);
    }

    Camera.PictureCallback mPicture = new Camera.PictureCallback() {
        @Override
        public void onPictureTaken(byte[] data, Camera camera) {
            File pictureFile = getOutputMediaFile();
            if (pictureFile == null) {
                Log.d("Error", "Error creating media file, check storage permissions: ");
                return;
            }
            try {
                FileOutputStream fos = new FileOutputStream(pictureFile);
                fos.write(data);
                fos.close();


            } catch (FileNotFoundException e) {
                Log.d("DBG", "File not found: " + e.getMessage());
            } catch (IOException e) {
                Log.d("Error", "Error accessing file: " + e.getMessage());
            }
        }
    };

    private static File getOutputMediaFile() {
        File mediaStorageDir = new File(Environment.getExternalStoragePublicDirectory(Environment.DIRECTORY_PICTURES), "MyCameraApp");

        if (!mediaStorageDir.exists()) {
            if (!mediaStorageDir.mkdirs()) {
                Log.d("MyCameraApp", "failed to create directory");

                return null;
            }
        }
        // Create a media file name
        String timeStamp = new SimpleDateFormat("yyyyMMdd_HHmmss").format(new Date());
        File mediaFile;
        mediaFile = new File(mediaStorageDir.getPath() + File.separator + "IMG_" + timeStamp + ".jpg");

        return mediaFile;

    }
}

So, after taking the photo, I want to display the image on an ImageView in the parameter view. But I dont know how to do this. How to get back the photo and display him on the parameter View ?

Thanks.

Sorry for my english :/

Upvotes: 0

Views: 37

Answers (2)

Toss Atom
Toss Atom

Reputation: 1

Thanks you.

I can't test my code now. But do you think that should work here ? : (cameraActivity)

public class CameraActivity extends Activity {

static Bitmap mBitmap;

... 

Camera.PictureCallback mPicture = new Camera.PictureCallback() {
    @Override
    public void onPictureTaken(byte[] data, Camera camera) {
        File pictureFile = getOutputMediaFile();
        if (pictureFile == null) {
            Log.d("Error", "Error creating media file, check storage permissions: ");
            return;
        }
        try {
            FileOutputStream fos = new FileOutputStream(pictureFile);
            fos.write(data);
            fos.close();

            BitmapFactory.Options options = new BitmapFactory.Options();

            Bitmap bmap= BitmapFactory.decodeByteArray(data, 0, data.length, options);
            mBitmap = bmap;

        } catch (FileNotFoundException e) {
            Log.d("DBG", "File not found: " + e.getMessage());
        } catch (IOException e) {
            Log.d("Error", "Error accessing file: " + e.getMessage());
        }
    }
};

and then in my parameter class :

public class Parametre extends Activity {

private EditText ETpseudo= null;
private Button buttonPhoto = null;
private ImageView iv = null;

@Override
protected void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);
    setContentView(R.layout.parametres);

    ETpseudo =(EditText) findViewById(R.id.editPseudo);
    buttonPhoto = (Button) findViewById(R.id.buttonPhoto);

    //ivPhoto.setImageBitmap();

    buttonPhoto.setOnClickListener(new View.OnClickListener() {

        @Override
        public void onClick(View v) {
            startActivity(new Intent(Parametre.this, CameraActivity.class));
        }
    });



        ImageView imageView=(ImageView)findViewById(R.id.cadreImage);
        imageView.setImageBitmap(CameraActivity.mBitmap);

    }

}

Upvotes: 0

Pratik
Pratik

Reputation: 456

you can do this in as easy way just create an static bitmap when picture taken in picturecallback method

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


          Log.e("clickedbitmaaapp", String.valueOf(bmap));

static Bitmap mBitmap=bmap;

create this bitmap in other class which where you can access this easily.

Upvotes: 1

Related Questions