Android:在风景模式下拍摄的照片强制

问题描述:

嗨已建立在Camera Preview上。Android:在风景模式下拍摄的照片强制

即使在纵向模式下,它也显示了风景预览。我用一些额外的代码改变了这个。但是,无论您的横向/纵向,它总是将图像保存为横向模式。

香港专业教育学院也现在*肖像模式:

setRequestedOrientation(ActivityInfo.SCREEN_ORIENTATION_PORTRAIT); 

我基本上采取任何图像中的风景出来。 (旋转拍摄的肖像)。

我该如何让它在定向模式下保存照片,或锁定到肖像假设?

我考虑过拍照阵列并旋转90度。但是,这需要将图像绘制到位图上,然后旋转并存储回数组。矫枉过正?除非你可以直接旋转图像数组?

+0

您只需要将图像保存在横向模式下? @Doomsknight – Venky

+0

像是,他们只能保存在肖像模式。或者为了检测当前的方向,并采取相应的行动 – Doomsknight

先检查使用下面摘录相机方向:

private int lookupRotation() {  
     WindowManager mWindowManager = (WindowManager) getSystemService(WINDOW_SERVICE); 
     Display mDisplay = mWindowManager.getDefaultDisplay(); 
     int rotation = mDisplay.getRotation(); 
     Log.v(LOG_TAG, "rotation: " + rotation); 
     return rotation; 
    } 

然后使用检查所需的旋转,并设置你的定位:

if (rotation == Surface.ROTATION_0) { 
    int degreesRotate = 90; 
} 

调整的位图和旋转你的位图基于以下使用方向代码段:

private Bitmap createBitmap(byte[] imageData, int maxWidth, int maxHeight, 
     int rotationDegrees) throws FileNotFoundException { 

    BitmapFactory.Options options = new BitmapFactory.Options(); 
    options.inSampleSize = 2; 
    options.inDensity = 240; 
    int imageWidth = 0; 
    int imageHeight = 0; 

    Bitmap image = BitmapFactory.decodeByteArray(imageData, 0, 
      imageData.length, options); 

    imageWidth = image.getWidth(); 
    imageHeight = image.getHeight(); 

    if (imageWidth > maxWidth || imageHeight > maxHeight) { 

     double imageAspect = (double) imageWidth/imageHeight; 
     double desiredAspect = (double) maxWidth/maxHeight; 
     double scaleFactor; 

     if (imageAspect < desiredAspect) { 
      scaleFactor = (double) maxHeight/imageHeight; 
     } else { 
      scaleFactor = (double) maxWidth/imageWidth; 
     } 

     float scaleWidth = ((float) scaleFactor) * imageWidth; 
     float scaleHeight = ((float) scaleFactor) * imageHeight; 

     Bitmap scaledBitmap = Bitmap.createScaledBitmap(image, 
       (int) scaleWidth, (int) scaleHeight, true); 
     image = scaledBitmap; 
    } 

    if (rotationDegrees != 0) { 

     int w = image.getWidth(); 
     int h = image.getHeight(); 
     mtx.postRotate(rotationDegrees); 
     Bitmap rotatedBMP = Bitmap.createBitmap(image, 0, 0, w, h, mtx, 
       true); 
     image = rotatedBMP; 
    } 

    return image; 
} 

上述方法将retu基于方向的rns位图。

+0

这仍然适用于定向*肖像? (旋转屏幕导致一切不必要的重新创建 - 导致滞后和坏的动画旋转效果)。看看getrotation代码,它似乎在检查手机方向而不是我的应用程序? - 我试试看,看起来很有前途 – Doomsknight

+0

这是一个处理方向的想法,只需根据您的需求定制 – Venky

+0

这还只是获得应用的方向。而且,由于速度的原因,现在固定为肖像,拍照时呈现纵向。不确定如何获得电话 – Doomsknight