Capture Image from Camera and Display in Activity

前端 未结 16 1012
悲&欢浪女
悲&欢浪女 2020-11-21 06:43

I want to write a module where on a click of a button the camera opens and I can click and capture an image. If I don\'t like the image I can delete it and click one more i

16条回答
  •  独厮守ぢ
    2020-11-21 07:18

    In Activity:

    @Override
        protected void onCreate(Bundle savedInstanceState) {
                     image = (ImageView) findViewById(R.id.imageButton);
            image.setOnClickListener(new OnClickListener() {
    
                @Override
                public void onClick(View v) {
                    try {
                    SimpleDateFormat sdfPic = new SimpleDateFormat(DATE_FORMAT);
                    currentDateandTime = sdfPic.format(new Date()).replace(" ", "");
                    File imagesFolder = new File(IMAGE_PATH, currentDateandTime);
                    imagesFolder.mkdirs();
                    Random generator = new Random();
                    int n = 10000;
                    n = generator.nextInt(n);
                    String fname = IMAGE_NAME + n + IMAGE_FORMAT;
                    File file = new File(imagesFolder, fname);
                    outputFileUri = Uri.fromFile(file);
                    cameraIntent= new Intent(
                            android.provider.MediaStore.ACTION_IMAGE_CAPTURE);
                    cameraIntent.putExtra(MediaStore.EXTRA_OUTPUT, outputFileUri);
                                    startActivityForResult(cameraIntent, CAMERA_DATA);
                    }catch(Exception e) {
                        e.printStackTrace();
                    }
    
                }
            });
               @Override
        public void onActivityResult(int requestCode, int resultCode, Intent data) {
            super.onActivityResult(requestCode, resultCode, data);
            switch(requestCode) {
            case CAMERA_DATA :
                    final int IMAGE_MAX_SIZE = 300;
                    try {
                        // Bitmap bitmap;
                        File file = null;
                        FileInputStream fis;
                        BitmapFactory.Options opts;
                        int resizeScale;
                        Bitmap bmp;
                        file = new File(outputFileUri.getPath());
                        // This bit determines only the width/height of the
                        // bitmap
                        // without loading the contents
                        opts = new BitmapFactory.Options();
                        opts.inJustDecodeBounds = true;
                        fis = new FileInputStream(file);
                        BitmapFactory.decodeStream(fis, null, opts);
                        fis.close();
    
                        // Find the correct scale value. It should be a power of
                        // 2
                        resizeScale = 1;
    
                        if (opts.outHeight > IMAGE_MAX_SIZE
                                || opts.outWidth > IMAGE_MAX_SIZE) {
                            resizeScale = (int) Math.pow(2, (int) Math.round(Math.log(IMAGE_MAX_SIZE/ (double) Math.max(opts.outHeight, opts.outWidth)) / Math.log(0.5)));
                        }
    
                        // Load pre-scaled bitmap
                        opts = new BitmapFactory.Options();
                        opts.inSampleSize = resizeScale;
                        fis = new FileInputStream(file);
                        bmp = BitmapFactory.decodeStream(fis, null, opts);
                        Bitmap getBitmapSize = BitmapFactory.decodeResource(
                                getResources(), R.drawable.male);
                        image.setLayoutParams(new RelativeLayout.LayoutParams(
                                200,200));//(width,height);
                        image.setImageBitmap(bmp);
                        image.setRotation(90);
                        fis.close();
    
                        ByteArrayOutputStream baos = new ByteArrayOutputStream();
                        bmp.compress(Bitmap.CompressFormat.JPEG, 70, baos);
                        imageByte = baos.toByteArray();
                        break;
                    } catch (FileNotFoundException e) {
    
                        e.printStackTrace();
                    } catch (IOException e) {
                        // TODO Auto-generated catch block
                        e.printStackTrace();
                    }
                }
            }
    

    in layout.xml:

    enter code here
    
    
    
            
    

    in manifest.xml:

           
    

提交回复
热议问题