Intereting Posts
Может ли устройство bluetooth 4.0 отправлять данные на устройство bluetooth 2.0? Ионная ошибка сборки: вы не приняли лицензионные соглашения следующих компонентов SDK: Текстовые изображения в макете фрагмента не меняются при вызове SetText () Как преобразовать изображение в строку Base64? Как заставить просмотр перерисовываться непосредственно перед выполнением следующей строки кода Использование «skipWhile» в сочетании с «repeatWhen» в RxJava для реализации опроса сервера Контекст доступа в ContentProvider Как обычно вы регистрируете записи журнала? (андроид) MPAndroidChart RadarChart сворачивает себя OpenGL ES Tracer не собирает никаких данных на моем Nexus 10 Как определить, открыт ли навигационный ящик? Центр выравнивания Android Уникальный идентификатор активности андроида Как передать данные из веб-браузера обратно в собственное приложение для Android Как продолжить цикл for через определенное время без использования метода `try … catch`?

Ориентация захвата камеры на устройствах samsung в android

Я создаю приложение для камеры. Изображение при захвате отображается в виде сетки. Теперь код работает полностью на всех устройствах, кроме устройств samsung.

Я столкнулся с проблемой ориентации. Когда я снимаю изображение в портретном режиме, изображение поворачивается при отображении в режиме сетки. Я не сохранил код поворота. Во-вторых, с EXIF ​​я добился правильного изображения в виде сетки, но когда меняется ориентация устройства, снова изображение вращается в утонченном виде.

Присоединение изображений: Введите описание изображения здесь

Введите описание изображения здесь

Извините за разрешение изображения. Пожалуйста, дайте понять, правильно ли они видны. Выгрузите снова. Я знаю, что есть такая помощь на SO. Но я думаю, что я где-то застрял.

Я имею в виду следующую ссылку:

How to show Captured Images dynamically in “GridView” Layout

    Это код, который я сделал с этим (он работает для каждого устройства):

    Эта часть – это то, где я поставил выбранное фото в изображение в главном действии:

    try { File imageFile = new File(cursor.getString(0)); ExifInterface exif = new ExifInterface( imageFile.getAbsolutePath()); int orientation = exif.getAttributeInt( ExifInterface.TAG_ORIENTATION, ExifInterface.ORIENTATION_NORMAL); switch (orientation) { case ExifInterface.ORIENTATION_ROTATE_270: rotate = 270; break; case ExifInterface.ORIENTATION_ROTATE_180: rotate = 180; break; case ExifInterface.ORIENTATION_ROTATE_90: rotate = 90; break; } Log.v("", "Exif orientation: " + orientation); } catch (Exception e) { e.printStackTrace(); } Matrix matrix = new Matrix(); matrix.postRotate(rotate); bmp = Bitmap.createBitmap(bmp, 0, 0, bmp.getWidth(), bmp.getHeight(), matrix, true); testImage.setImageBitmap(null); testImage.setImageBitmap(bmp); 

    Постоянные значения в активности камеры:

      private static final int ORIENTATION_PORTRAIT_NORMAL = 1; private static final int ORIENTATION_PORTRAIT_INVERTED = 2; private static final int ORIENTATION_LANDSCAPE_NORMAL = 3; private static final int ORIENTATION_LANDSCAPE_INVERTED = 4; private OrientationEventListener mOrientationEventListener; private int mOrientation = -1; 

    Функция обратного вызова в работе камеры:

      Camera.PictureCallback photoCallback=new Camera.PictureCallback(){ public void onPictureTaken(final byte[] data, final Camera camera){ dialog=ProgressDialog.show(CameraActivity.this,"","Please wait while the photo is being saved.."); new Thread(){ public void run(){ try{ Thread.sleep(1000); } catch(Exception ex){} onPictureTake(data,camera); } }.start(); } }; 

    Выполнять фотофункцию в камере:

      public void onPictureTake(byte[] data, Camera camera){ switch (mOrientation) { case ORIENTATION_PORTRAIT_NORMAL: rotate = 90; break; case ORIENTATION_LANDSCAPE_NORMAL: rotate = 0; break; case ORIENTATION_PORTRAIT_INVERTED: rotate = 270; break; case ORIENTATION_LANDSCAPE_INVERTED: rotate = 180; break; } Matrix matrix = new Matrix(); matrix.postRotate(rotate); bmp = BitmapFactory.decodeByteArray(data, 0, data.length); bmp = Bitmap.createBitmap(bmp, 0, 0, bmp.getWidth(), bmp.getHeight(), matrix, true); mutableBitmap = bmp.copy(Bitmap.Config.ARGB_8888, true); savePhoto(mutableBitmap); dialog.dismiss(); flag = 0; finish(); } 

    Ориентированный слушатель, который называется inresume в деятельности камеры:

     mOrientationEventListener = new OrientationEventListener(this, SensorManager.SENSOR_DELAY_NORMAL) { @SuppressWarnings("deprecation") @Override public void onOrientationChanged(int orientation) { // determine our orientation based on sensor response int lastOrientation = mOrientation; Display display = ((WindowManager)getSystemService(WINDOW_SERVICE)).getDefaultDisplay(); int rotation = getWindowManager().getDefaultDisplay().getRotation(); System.out.println(rotation+""); if (display.getOrientation() != Surface.ROTATION_0) { // landscape oriented devices System.out.println("LANDSCAPE"); if (orientation >= 315 || orientation < 45) { if (mOrientation != ORIENTATION_LANDSCAPE_NORMAL) { mOrientation = ORIENTATION_LANDSCAPE_NORMAL; } } else if (orientation < 315 && orientation >= 225) { if (mOrientation != ORIENTATION_PORTRAIT_INVERTED) { mOrientation = ORIENTATION_PORTRAIT_INVERTED; } } else if (orientation < 225 && orientation >= 135) { if (mOrientation != ORIENTATION_LANDSCAPE_INVERTED) { mOrientation = ORIENTATION_LANDSCAPE_INVERTED; } } else if (orientation <135 && orientation > 45) { if (mOrientation != ORIENTATION_PORTRAIT_NORMAL) { mOrientation = ORIENTATION_PORTRAIT_NORMAL; } } } else { // portrait oriented devices System.out.println("PORTRAIT"); if (orientation >= 315 || orientation < 45) { if (mOrientation != ORIENTATION_PORTRAIT_NORMAL) { mOrientation = ORIENTATION_PORTRAIT_NORMAL; } } else if (orientation < 315 && orientation >= 225) { if (mOrientation != ORIENTATION_LANDSCAPE_NORMAL) { mOrientation = ORIENTATION_LANDSCAPE_NORMAL; } } else if (orientation < 225 && orientation >= 135) { if (mOrientation != ORIENTATION_PORTRAIT_INVERTED) { mOrientation = ORIENTATION_PORTRAIT_INVERTED; } } else if (orientation <135 && orientation > 45) { if (mOrientation != ORIENTATION_LANDSCAPE_INVERTED) { mOrientation = ORIENTATION_LANDSCAPE_INVERTED; } } } } }; 

    Вот код, который я использовал в своем приложении для поворота и работы на всех устройствах:

     private Bitmap adjustImageOrientation(Bitmap image) { ExifInterface exif; try { exif = new ExifInterface(picturePath); int exifOrientation = exif.getAttributeInt( ExifInterface.TAG_ORIENTATION, ExifInterface.ORIENTATION_NORMAL); int rotate = 0; switch (exifOrientation) { case ExifInterface.ORIENTATION_ROTATE_90: rotate = 90; break; case ExifInterface.ORIENTATION_ROTATE_180: rotate = 180; break; case ExifInterface.ORIENTATION_ROTATE_270: rotate = 270; break; } if (rotate != 0) { int w = image.getWidth(); int h = image.getHeight(); // Setting pre rotate Matrix mtx = new Matrix(); mtx.preRotate(rotate); // Rotating Bitmap & convert to ARGB_8888, required by tess image = Bitmap.createBitmap(image, 0, 0, w, h, mtx, false); } } catch (IOException e) { return null; } return image.copy(Bitmap.Config.ARGB_8888, true); } 

    Сначала вам нужно получить исходную ориентацию файла –

      try { ExifInterface exif = new ExifInterface("File AbsolutePath"); int orientation = exif.getAttributeInt(ExifInterface.TAG_ORIENTATION, ExifInterface.ORIENTATION_UNDEFINED); Bitmap bm = rotateBitmap("Old Bitmap", orientation); } catch (IOException e) { e.printStackTrace(); } 

    Вам нужно написать метод, который возвращает битмап после поворота в правильном направлении.

     public Bitmap rotateBitmap(Bitmap bitmap, int orientation) throws IOException { Matrix matrix = new Matrix(); switch (orientation) { case ExifInterface.ORIENTATION_NORMAL: return bitmap; case ExifInterface.ORIENTATION_FLIP_HORIZONTAL: matrix.setScale(-1, 1); break; case ExifInterface.ORIENTATION_ROTATE_180: matrix.setRotate(180); break; case ExifInterface.ORIENTATION_FLIP_VERTICAL: matrix.setRotate(180); matrix.postScale(-1, 1); break; case ExifInterface.ORIENTATION_TRANSPOSE: matrix.setRotate(90); matrix.postScale(-1, 1); break; case ExifInterface.ORIENTATION_ROTATE_90: matrix.setRotate(90); break; case ExifInterface.ORIENTATION_TRANSVERSE: matrix.setRotate(-90); matrix.postScale(-1, 1); break; case ExifInterface.ORIENTATION_ROTATE_270: matrix.setRotate(-90); break; default: return bitmap; } try { Bitmap bmRotated = Bitmap.createBitmap(bitmap, 0, 0, bitmap.getWidth(), bitmap.getHeight(), matrix, true); bitmap.recycle(); return bmRotated; } catch (OutOfMemoryError e) { e.printStackTrace(); return null; } }