我有這個應用程序在肖像模式下運行,並作爲一項活動的一部分,我有一個攝像頭對象作爲片段運行。Android前置攝像頭拍攝倒影照片
我可以選擇從前置攝像頭切換到後置攝像頭,並且在使用後置攝像頭拍攝照片時一切都很好。
當我用前置攝像頭拍照時,它們會翻轉180度。 現在我知道這可能與縱向模式有關,但將它放在橫向模式中會殺死我的應用程序。
是否有無論如何這可以修復,因此拍攝的照片與您在預覽中看到的相同?
listener = new OrientationEventListener(this.getActivity(),SensorManager.SENSOR_DELAY_NORMAL){
@Override
public void onOrientationChanged(int orientation) {
// TODO Auto-generated method stub
if (orientation == ORIENTATION_UNKNOWN) return;
android.hardware.Camera.CameraInfo info =
new android.hardware.Camera.CameraInfo();
android.hardware.Camera.getCameraInfo(mCurrentCamera, info);
orientation = (orientation + 45)/90 * 90;
int rotation = 0;
if (info.facing == CameraInfo.CAMERA_FACING_FRONT) {
rotation = (info.orientation - orientation + 360) % 360;
} else { // back-facing camera
rotation = (info.orientation + orientation) % 360;
}
if (mCamera.getParameters() != null){
Camera.Parameters mParameters = mCamera.getParameters();
mParameters.setRotation(rotation);
mCamera.setParameters(mParameters);
}
}
};
listener.enable();
if (listener.canDetectOrientation())
Log.d("Orientation Possible", "Orientation Possible");
問題是,在我嘗試拍照後,這個東西崩潰了。另外,如果它只是在預覽模式下運行一段時間,它會再次崩潰。我也應該補充一點,在另一種方法中,我正在這樣做。
public void switchCamera(Camera camera) {
setCamera(camera);
try {
camera.setPreviewDisplay(mHolder);
} catch (IOException exception) {
Log.e(TAG, "IOException caused by setPreviewDisplay()", exception);
}
Camera.Parameters parameters = camera.getParameters();
parameters.setPreviewSize(mPreviewSize.width, mPreviewSize.height);
requestLayout();
try{
camera.setParameters(parameters);
}
catch (RuntimeException ex){
Log.d("Preview", "Failure to set proper parameters");
//need to improve this method
if (mSupportedPreviewSizes != null) {
Camera.Size cs = mSupportedPreviewSizes.get(0);
parameters.setPreviewSize(cs.width, cs.height);
camera.setParameters(parameters);
requestLayout();
//int tempheight = mPreviewSize.height;
//mPreviewSize.height = mPreviewSize.width;
//mPreviewSize.width = tempheight;
}
}
當您在相機之間切換時(背面朝向反面朝前),這稱爲。這可能會干擾定位事件監聽器嗎?
此外,當保存拍攝的照片時,這就是我所說的。在將數據作爲參數之前,我試圖讓它也取決於屏幕方向。問題是屏幕的方向始終是90,無論如何。因此,位圖將始終旋轉90度(這對於使用後置攝像頭拍攝很好),但在與前置攝像頭一起拍攝時將其反轉。這個功能可以修復嗎?
public static Bitmap MakeSquare(byte[] data, int orientation) {
int width;
int height;
// Rotate photo
Matrix matrix = new Matrix();
matrix.postRotate(orientation);
// Convert ByteArray to Bitmap
Bitmap bitPic = BitmapFactory.decodeByteArray(data, 0, data.length);
width = bitPic.getWidth();
height = bitPic.getHeight();
// Create new Bitmap out of the old one
Bitmap bitPicFinal = Bitmap.createBitmap(bitPic, 0, 0, width, height,matrix, true);
bitPic.recycle();
int desWidth;
int desHeight;
desWidth = bitPicFinal.getWidth();
desHeight = desWidth;
Bitmap croppedBitmap = Bitmap.createBitmap(bitPicFinal, 0,bitPicFinal.getHeight()/2 - bitPicFinal.getWidth()/2,desWidth, desHeight);
croppedBitmap = Bitmap.createScaledBitmap(croppedBitmap, 528, 528, true);
return croppedBitmap;
}
謝謝!您是否有關於如何在「所有」設備上使用此解決方案的信息? – marino 2014-08-26 23:54:45
解決了我的前置攝像頭圖像旋轉問題(y) – 2014-09-29 10:23:33
這是最好的一個..謝謝 – tsanzol 2015-08-19 08:34:12