android相机改变方向

时间:2014-09-30 07:25:33

标签: android camera orientation surface

我在Android上制作了一个自定义相机并遇到了方向问题。 具有surfaceview的活动是纵向方向,因为这对onConfigurationChanged监听器不起作用,但我知道它。 我想始终以正常方向保存相机中的照片,但根据拍摄方向的不同,图像会以不同的方向保存。

代码:

         public void onClickPicture(View view) {
              camera.takePicture(null, null, new Camera.PictureCallback() {
                  @Override
                  public void onPictureTaken(byte[] data, Camera camera) {
                       try { 
                          FileOutputStream fos = new FileOutputStream(photoFile);
                          fos.write(data);
                          fos.close();
                          Bitmap bm = BitmapFactory.decodeByteArray(data,0,data.length);
                          ExifInterface ei;
                              ei = new ExifInterface(photoFile.getAbsolutePath());
                              int orientation = ei.getAttributeInt(ExifInterface.TAG_ORIENTATION,
                            ExifInterface.ORIENTATION_NORMAL);
                              switch (orientation) {
                                  case ExifInterface.ORIENTATION_NORMAL:
                                  //ALAWAYS THIS CASE
                                  break;
                                  case ExifInterface.ORIENTATION_ROTATE_90:
                                      bm = rotateImage(bm, 90);
                                  break;
                                  case ExifInterface.ORIENTATION_ROTATE_180:
                                      bm = rotateImage(bm, 180);
                                  break;
                                  case ExifInterface.ORIENTATION_ROTATE_270:
                                      bm = rotateImage(bm, 270);
                                  break;
                               }
                           } catch (Exception e) {
                              e.printStackTrace();
                     }
                 });
           }

1 个答案:

答案 0 :(得分:1)

您需要扩展OrientationEventListener并在您的活动中创建它的实例。之后,您调用此实例的enable方法 每当设备的方向发生变化时,都会调用方法OrientationEventListener#onOrientationChanged(int)。在此方法中,您可以通过Camera.Parameters#setRotation(int)方法计算要在相机参数中设置的新旋转。