gpt4 book ai didi

android - 如何检测android中的相机方向?

转载 作者:塔克拉玛干 更新时间:2023-11-03 00:19:30 24 4
gpt4 key购买 nike

当我在我的 Android One 手机或模拟器本身上测试我的应用程序时,一切正常,但在其他一些设备上出现问题。

问题是,我基本上发送相机 Intent ,在用户拍照后从 Intent 中获取数据,然后使用从相机获得的任何内容设置 ImageView 的像素。对于某些设备(主要是三星),图像会旋转,不会在拍摄时显示。

我的应用只能在纵向模式下工作,但如果用户在拍照时旋转手机,也可以在横向模式下拍照。

有没有办法检测设备旋转图像的默认角度,以便我在拍摄图像后旋转位图?

代码如下:

发送 Intent :

File path = new File(getActivity().getFilesDir(), "map_roomie");

if (!path.exists()) path.mkdirs();

mFileName = createImageFileName();

File image = new File(path, mFileName);
Uri imageUri = FileProvider.getUriForFile(getActivity(), AddRoomFragment.CAPTURE_IMAGE_FILE_PROVIDER, image);

Intent imageCaptureIntent = new Intent(MediaStore.ACTION_IMAGE_CAPTURE);
imageCaptureIntent.putExtra(MediaStore.EXTRA_OUTPUT, imageUri);
startActivityForResult(imageCaptureIntent, AddRoomFragment.CAMERA_CAPTURE_IMAGE_REQUEST_CODE);

捕捉 fragment 的 Intent

File path = new File(getActivity().getFilesDir(), "map_roomie");

if (!path.exists()) path.mkdirs();

File imageFile = new File(path, mFileName);

setBitmapOfImageView(mCurrentPhotoId, decodeAndReturnBitmap(imageFile.getAbsolutePath()));

辅助函数:

public void setBitmapOfImageView(int photoId, Bitmap bitmap)
{
mPhotos[photoId].setImageBitmap(bitmap);

mPhotosState[photoId] = 1;
}

public Bitmap decodeAndReturnBitmap(String filePath)
{
BitmapFactory.Options o = new BitmapFactory.Options();
o.inJustDecodeBounds = true;

BitmapFactory.decodeFile(filePath, o);

final int REQUIRED_SIZE = 512;

int widthTemp = o.outWidth, heightTemp = o.outHeight;
int scale = 1;

while (true) {
if (widthTemp < REQUIRED_SIZE && heightTemp < REQUIRED_SIZE) {
break;
}

widthTemp /= 2;
heightTemp /= 2;
scale *= 2;
}

BitmapFactory.Options o2 = new BitmapFactory.Options();
o2.inSampleSize = scale;

return BitmapFactory.decodeFile(filePath, o2);
}

最佳答案

如果你想让摄像头图像与显示器的显示方向相同,可以使用以下代码。

public static void setCameraDisplayOrientation(Activity activity,
int cameraId, android.hardware.Camera camera) {
android.hardware.Camera.CameraInfo info =
new android.hardware.Camera.CameraInfo();
android.hardware.Camera.getCameraInfo(cameraId, info);
int rotation = activity.getWindowManager().getDefaultDisplay()
.getRotation();
int degrees = 0;
switch (rotation) {
case Surface.ROTATION_0: degrees = 0; break;
case Surface.ROTATION_90: degrees = 90; break;
case Surface.ROTATION_180: degrees = 180; break;
case Surface.ROTATION_270: degrees = 270; break;
}

int result;
if (info.facing == Camera.CameraInfo.CAMERA_FACING_FRONT) {
result = (info.orientation + degrees) % 360;
result = (360 - result) % 360; // compensate the mirror
} else { // back-facing
result = (info.orientation - degrees + 360) % 360;
}
camera.setDisplayOrientation(result);
}

有关更多信息,请参阅 https://developer.android.com/reference/android/hardware/Camera.html#setDisplayOrientation(int)

关于android - 如何检测android中的相机方向?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/42917828/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com