Захват фото поворота на 90 градусов в Samsung Mobile

Фотография поворачивается на 90 градусов, снимая с камеры в Samsung Mobile отдыха других мобильных телефонов (HTC), работает нормально. Пожалуйста, помогите мне в этом.

Intent cameraIntent = new Intent(android.provider.MediaStore.ACTION_IMAGE_CAPTURE);
startActivityForResult(cameraIntent, IMAGE_CAPTURE); 

@Override 
 protected void onActivityResult(int requestCode, int resultCode, Intent data) {     
    super.onActivityResult(requestCode, resultCode, data);    
      try
    {
    if (requestCode == IMAGE_CAPTURE) {
       if (resultCode == RESULT_OK){

       Uri contentUri = data.getData();
       if(contentUri!=null)
       {
        String[] proj = { MediaStore.Images.Media.DATA };         
            Cursor cursor = managedQuery(contentUri, proj, null, null, null);         
        int column_index = cursor.getColumnIndexOrThrow(MediaStore.Images.Media.DATA);         
        cursor.moveToFirst();         
        imageUri = Uri.parse(cursor.getString(column_index));
       }

       tempBitmap = (Bitmap) data.getExtras().get("data"); 
       mainImageView.setImageBitmap(tempBitmap);
       isCaptureFromCamera = true;
    }
 }
 Alex Cohn17 нояб. 2012 г., 17:09
Вы ожидаете ориентации портретного изображения?
 Mohanish16 апр. 2015 г., 09:21
Самсунг устройства отстой. Тестирование, в частности, на устройствах Samsung - ужасно. Он захватывает видео и изображения только в разрешении HD.
 Ajay S22 нояб. 2012 г., 17:45
@ Алекс Кон есть ли решение этой проблемы
 ekatz31 янв. 2013 г., 23:27
У меня тоже была эта проблема, взгляните наstackoverflow.com/questions/8450539/... это разобралось для меня.
 Alex Cohn17 нояб. 2012 г., 18:54
На разных устройствах Android, включая Samsung, есть множество разных ошибок с портретной ориентацией камеры. Если это возможно, используйте альбомную ориентацию и режим имитации портрета, используя повернутые элементы пользовательского интерфейса, как это делает приложение «Стандартная камера».
 Ajay S17 нояб. 2012 г., 18:37
Нет, я ожидаю ту же ориентацию изображения, что и при съемке, например, для фотосъемки в портретном режиме, тогда она должна быть в портретной и в альбомной ориентации.

Ответы на вопрос(3)

Еще одна вещь, которую вы можете добавить к вышеуказанным решениям:"samsung".contentEquals(Build.MANUFACTURER), Если вы знаете, что ваша проблема связана только с устройствами Samsung, вы можете быть уверены, что вам нужно повернуть возвращенное изображение (только)if ("samsung".contentEquals(Build.MANUFACTURER) && getActivity().getRequestedOrientation() == ActivityInfo.SCREEN_ORIENTATION_SENSOR_PORTRAIT // && width > height//) // here you know you need to rotate

Ты мог бы "разумно» уверен, что вращение оправдано тогда.

 Peter14 нояб. 2017 г., 11:04
это не решение. Фото у Самсунга всегда есть ШИРИНА>РОСТ. Ошибка только в режиме переноса.
public static Bitmap rotateBitmap(Bitmap b, float degrees) {
    Matrix m = new Matrix();
    if (degrees != 0) {
        // clockwise
        m.postRotate(degrees, (float) b.getWidth() / 2,
                (float) b.getHeight() / 2);
    }

    try {
        Bitmap b2 = Bitmap.createBitmap(b, 0, 0, b.getWidth(),
                b.getHeight(), m, true);
        if (b != b2) {
            b.recycle();
            b = b2;
        }
    } catch (OutOfMemoryError ex) {
        // We have no memory to rotate. Return the original bitmap.
    }
    return b;
}
Решение Вопроса

Некоторые устройства поворачивают изображение в соответствии с ориентацией устройства.

здесь я написал один общий метод, чтобы получить ориентацию и получить изображение в нужном масштабе

    public  Bitmap decodeFile(String path) {//you can provide file path here 
        int orientation;
        try {
            if (path == null) {
                return null;
            }
            // decode image size 
            BitmapFactory.Options o = new BitmapFactory.Options();
            o.inJustDecodeBounds = true;
            // Find the correct scale value. It should be the power of 2.
            final int REQUIRED_SIZE = 70;
            int width_tmp = o.outWidth, height_tmp = o.outHeight;
            int scale = 0;
            while (true) {
                if (width_tmp / 2 < REQUIRED_SIZE
                        || height_tmp / 2 < REQUIRED_SIZE)
                    break;
                width_tmp /= 2;
                height_tmp /= 2;
            scale++;
            }
            // decode with inSampleSize
            BitmapFactory.Options o2 = new BitmapFactory.Options();
            o2.inSampleSize = scale;
            Bitmap bm = BitmapFactory.decodeFile(path, o2);
            Bitmap bitmap = bm;

            ExifInterface exif = new ExifInterface(path);

            orientation = exif
                    .getAttributeInt(ExifInterface.TAG_ORIENTATION, 1);

            Log.e("ExifInteface .........", "rotation ="+orientation);

//          exif.setAttribute(ExifInterface.ORIENTATION_ROTATE_90, 90);

            Log.e("orientation", "" + orientation);
            Matrix m = new Matrix();

            if ((orientation == ExifInterface.ORIENTATION_ROTATE_180)) {
                m.postRotate(180);
//              m.postScale((float) bm.getWidth(), (float) bm.getHeight());
                // if(m.preRotate(90)){
                Log.e("in orientation", "" + orientation);
                bitmap = Bitmap.createBitmap(bm, 0, 0, bm.getWidth(),
                        bm.getHeight(), m, true);
                return bitmap;
            } else if (orientation == ExifInterface.ORIENTATION_ROTATE_90) {
                m.postRotate(90); 
                Log.e("in orientation", "" + orientation);
                bitmap = Bitmap.createBitmap(bm, 0, 0, bm.getWidth(),
                        bm.getHeight(), m, true);
                return bitmap;
            }
            else if (orientation == ExifInterface.ORIENTATION_ROTATE_270) {
                m.postRotate(270);
                Log.e("in orientation", "" + orientation);
                bitmap = Bitmap.createBitmap(bm, 0, 0, bm.getWidth(),
                        bm.getHeight(), m, true);
                return bitmap;
            } 
            return bitmap;
        } catch (Exception e) {
            return null;
        }

    }

РЕДАКТИРОВАТЬ:

Этот код не оптимизирован, я просто показываю логический код моего тестового проекта.

 dharam19 мар. 2013 г., 14:59
Ошибка памяти @Hasmukh иногда зависит от размера кучи устройства, и иногда мы должны быть осторожны с этими растровыми изображениями, их необходимо перерабатывать после использования растрового изображения.
 Hasmukh19 мар. 2013 г., 09:02
да, если я задаю масштабный тип 8, тогда он работает нормально, но мне нужно показать большое изображение в качестве предварительного просмотра, а также загрузить это большое изображение как byte64.
 Hasmukh19 мар. 2013 г., 08:51
работает нормально но даётНедостаточно памяти » пока я снимаю непрерывный снимок в Samsung Galaxy tab2 (7 "). Пожалуйста, вы можете дать какое-то решение.
 dharam19 мар. 2013 г., 08:56
@Hasmukh вы можете изменить битовый массив размера масштаба, в этом коде я сделал его надежным
 Hasmukh14 мар. 2013 г., 10:41
Это действительно хорошее решение, и его работа отлично. Большое спасибо.
 dharam25 июн. 2013 г., 11:11
@ Бумага. Возможно, ваше устройство сделало снимок в правильной ориентации или режим ориентации устройства может быть отключен.
 PaperThick25 июн. 2013 г., 09:48
Я продолжаю получать ориентацию = 0, когда использую этот код, независимо от того, как я держу свой телефон HTC. У кого-то есть такая же проблема?

Ваш ответ на вопрос