Issues taking picture with Android (Vertical Camera | Portrait)

后端 未结 4 1535
心在旅途
心在旅途 2021-01-06 06:25

With the following code shows a preview of the camera vertically and it\'s works.. BUT!! I get a photo in landscape! :(

How I can build it vertically? I\'ve the prev

相关标签:
4条回答
  • 2021-01-06 06:28

    For setting the orientation of the image use below code:

    Matrix mat = new Matrix();
    mat.postRotate(90);
    image_to_upload = Bitmap.createBitmap(myImage, 0, 0, myImage.getWidth(), myImage.getHeight(), mat, true);
    
    0 讨论(0)
  • 2021-01-06 06:38
    Camera.Parameters param;
    param = camera.getParameters();
    
    Display display = ((WindowManager)getSystemService(WINDOW_SERVICE)).getDefaultDisplay();
    if(display.getRotation() == Surface.ROTATION_0)
    {
        camera.setDisplayOrientation(90);
        param.setRotation(90);
    }
    if(display.getRotation() == Surface.ROTATION_270)
    {
        camera.setDisplayOrientation(180);
        param.setRotation(180);
    }
    
    camera.setParameters(param);
    camera.takePicture(shutterCallback, rawCallback, jpegCallback);
    
    0 讨论(0)
  • 2021-01-06 06:47

    You don't need actually to rotate bitmap. It is memory consuming/slow etc... Looks like it is better in your case(saving to file right after shot) to update Exif tags in a JPEG file, for example:

        int degrees = 90;
        ExifInterface exif = new ExifInterface(path);
        exif.setAttribute(ExifInterface.TAG_ORIENTATION, String.valueOf(degrees));
        exif.saveAttributes();
    
    0 讨论(0)
  • 2021-01-06 06:52

    It is the solution I implemented. It works perfectly. I hope that helps.

    PictureCallback myPictureCallback_JPG = new PictureCallback() {
        @Override
        public void onPictureTaken(byte[] arg0, Camera arg1) {
            BitmapFactory.Options options = new BitmapFactory.Options();
            options.inSampleSize = 6;
            options.inDither = false; // Disable Dithering mode
            options.inPurgeable = true; // Tell to gc that whether it needs free
                                        // memory, the Bitmap can be cleared
            options.inInputShareable = true; // Which kind of reference will be
                                                // used to recover the Bitmap
                                                // data after being clear, when
                                                // it will be used in the future
            options.inTempStorage = new byte[32 * 1024];
            options.inPreferredConfig = Bitmap.Config.RGB_565;
            bMap = BitmapFactory.decodeByteArray(arg0, 0, arg0.length, options);
    
            // others devices
            if(bMap.getHeight() < bMap.getWidth()){
                orientation = 90;
            } else {
                orientation = 0;
            }
    
            Bitmap bMapRotate;
            if (orientation != 0) {
                Matrix matrix = new Matrix();
                matrix.postRotate(orientation);
                bMapRotate = Bitmap.createBitmap(bMap, 0, 0, bMap.getWidth(),
                        bMap.getHeight(), matrix, true);
            } else
                bMapRotate = Bitmap.createScaledBitmap(bMap, bMap.getWidth(),
                        bMap.getHeight(), true);
    
    
            FileOutputStream out;
            try {
                out = new FileOutputStream(
                        String.format("/sdcard/DCIM/test/screen.jpg"));
                bMapRotate.compress(Bitmap.CompressFormat.JPEG, 90, out);
                if (bMapRotate != null) {
                    bMapRotate.recycle();
                    bMapRotate = null;
                }
            } catch (FileNotFoundException e) {
                // TODO Auto-generated catch block
                e.printStackTrace();
            }
            camera.startPreview();
            MostrarFoto(imageInSD);
            editor = prefs.edit();
            editor.putString("PathSeleccio", imageInSD);
            editor.commit();
        }
    };
    
    0 讨论(0)
提交回复
热议问题