Tôi có ứng dụng này đang chạy ở chế độ dọc và là một phần của một hoạt động tôi có đối tượng máy ảnh đang chạy dưới dạng một đoạn trong đó.Máy ảnh mặt trước của Android Chụp ảnh ngược
Tôi có tùy chọn để chuyển từ máy ảnh mặt trước sang mặt sau và khi chụp ảnh bằng camera sau, tất cả đều tốt và tốt.
Khi tôi chụp ảnh bằng máy ảnh mặt trước, chúng sẽ bị đảo ngược 180 độ. Bây giờ tôi biết rằng đây có thể là một cái gì đó để làm với định hướng đang ở chế độ chân dung, nhưng có nó trong cảnh quan sẽ chỉ giết ý tưởng của ứng dụng của tôi.
Có cách nào điều này có thể được khắc phục để ảnh được chụp giống với ảnh bạn thấy trong bản xem trước không?
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");
Vấn đề là sau khi tôi thử chụp ảnh này, sự cố này bị treo. Ngoài ra, nếu nó chạy trong một thời gian chỉ trong chế độ xem trước nó bị treo một lần nữa. Tôi cũng có lẽ nên thêm, rằng trong một phương pháp khác tôi đang làm điều này.
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;
}
}
Điều này được gọi khi bạn chuyển đổi giữa các máy ảnh (quay mặt về phía trước ngược lại). Điều này có thể gây trở ngại cho người nghe sự kiện định hướng không?
Ngoài ra, khi lưu ảnh được chụp, đây là những gì tôi gọi. Trước khi nó chỉ tham gia vào dữ liệu như một tham số, nhưng tôi đã cố gắng để làm cho nó mất định hướng màn hình là tốt. Vấn đề là định hướng màn hình luôn luôn là 90, không có vấn đề gì. Vì vậy, bitmap sẽ luôn được xoay 90 độ (rất tuyệt vời để chụp ảnh bằng camera sau) nhưng đảo ngược nó khi chụp bằng camera trước. Có thể sửa lỗi được thực hiện trong chức năng này không?
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;
}
Cảm ơn người đàn ông! Bạn có bất kỳ thông tin nào về cách hoạt động của giải pháp này trên các thiết bị 'tất cả' không? – marino
Giải quyết vấn đề xoay hình ảnh camera phía trước của tôi (y) –
điều này là tốt nhất .. cảm ơn – tsanzol