Camera orientation, не могу правильно настроить

Ответить
Аватара пользователя
Mikhail_dev
Сообщения: 2386
Зарегистрирован: 09 янв 2012, 14:45
Откуда: Самара

Camera orientation, не могу правильно настроить

Сообщение Mikhail_dev » 14 ноя 2012, 12:06

Здравствуйте. Есть незамысловатый код. Создается объект HiddenCamera и в методе takePhoto делается снимок. Снимок делается и в этом плане всё работает. Не работает переворачивание экрана через метод setDisplayOrientation. Я никак не могу понять что делаю не так. Юзал проверенное решение с интернета, но с ним не работает (закоментированный код), поэтому решил в лоб, сделать протретную съёмку. Но у меня всегда фотографируется на бок изображение. Подскажите что делаю не так.

Код: Выделить всё

public class HiddenCamera implements SurfaceHolder.Callback,
		Camera.PictureCallback, Camera.AutoFocusCallback {

	private Context context;
	private Camera camera;
	private SurfaceView surfaceView;

	public HiddenCamera(Context context) {
		this.context = context;
	}

	public boolean takePhoto() {
		try {
			camera = Camera.open();
		} catch (Exception cameraException) {
			cameraException.printStackTrace();
			return false;
		}
		surfaceView = new SurfaceView(context);
		try {
			camera.setPreviewDisplay(surfaceView.getHolder());
		} catch (IOException e) {
			closeCamera();
			e.printStackTrace();
			return false;
		}
		prepareCameraParameters();
		camera.startPreview();
		camera.autoFocus(this);
		return true;
	}

	private void prepareCameraParameters() {
		if (Build.VERSION.SDK_INT >= 8)
			setDisplayOrientation();
		else {
			Camera.Parameters parameters = camera.getParameters();
			if (context.getResources().getConfiguration().orientation == Configuration.ORIENTATION_PORTRAIT) {
				parameters.set("orientation", "portrait");
				parameters.set("rotation", 90);
			}
			if (context.getResources().getConfiguration().orientation == Configuration.ORIENTATION_LANDSCAPE) {
				parameters.set("orientation", "landscape");
				parameters.set("rotation", 0);
			}
			camera.setParameters(parameters);
		}
	}
	
	@TargetApi(8)
	private void setDisplayOrientation() {
	    camera.setDisplayOrientation(90);

//        Display display = ((WindowManager)context.getSystemService(context.WINDOW_SERVICE)).getDefaultDisplay();
//        if(display.getRotation() == Surface.ROTATION_0) {
//            //parameters.setPreviewSize(height, width);
//            Log.d("sample", "ROTATION=0"+display.getRotation());
//            camera.setDisplayOrientation(90);
//        }
//        if(display.getRotation() == Surface.ROTATION_90) {
//            //parameters.setPreviewSize(width, height);         
//            Log.d("sample", "ROTATION=90"+display.getRotation());
//        }
//        if(display.getRotation() == Surface.ROTATION_180) {
//            //parameters.setPreviewSize(height, width);
//            Log.d("sample", "ROTATION=180"+display.getRotation());
//        }
//        if(display.getRotation() == Surface.ROTATION_270) {
//            //parameters.setPreviewSize(width, height);
//            camera.setDisplayOrientation(180);
//            Log.d("sample", "ROTATION=270"+display.getRotation());
//        }
	}
	private void closeCamera() {
		if (camera != null) {
			camera.setPreviewCallback(null);
			camera.stopPreview();
			camera.release();
			camera = null;
		}
	}

	@Override
	public void onPictureTaken(byte[] paramArrayOfByte, Camera paramCamera) {
		Image image = new Image(System.currentTimeMillis(), paramArrayOfByte);
		new SaveInBackground().execute(image);
		closeCamera();
	}

	@Override
	public void onAutoFocus(boolean paramBoolean, Camera paramCamera) {
		camera.takePicture(null, null, null, this);
	}

Ответить