gpt4 book ai didi

Android-从前置摄像头拍照会旋转照片

转载 作者:塔克拉玛干 更新时间:2023-11-02 20:20:04 26 4
gpt4 key购买 nike

我正在 android 中创建一个应用程序,用户只能在纵向模式下从前置摄像头拍照。我已经实现了将相机 View 固定为纵向,但是当拍摄照片时它看起来是旋转的。最糟糕的是,不同手机的旋转方向不同,一个手机是右旋,另一个是左旋。

这是我的代码 fragment

确保 Activity 仅纵向播放

 <activity
android:name=".MainActivity"
android:label="@string/title_activity_main"
android:screenOrientation="portrait">
<intent-filter>
<action android:name="android.intent.action.MAIN" />

<category android:name="android.intent.category.LAUNCHER" />
</intent-filter>
</activity>

获取相机

   @Override
public void onResume() {
super.onResume();

if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.GINGERBREAD) {
Camera.CameraInfo info=new Camera.CameraInfo();

for (int i=0; i < Camera.getNumberOfCameras(); i++) {
Camera.getCameraInfo(i, info);

if (info.facing == Camera.CameraInfo.CAMERA_FACING_FRONT) {
camera=Camera.open(i);
}
}
}

if (camera == null) {
camera=Camera.open();
}
}

旋转相机

    @Override
public void surfaceChanged(SurfaceHolder holder, int format, int width,
int height) {
if(previewing){
camera.stopPreview();
previewing = false;
}

if (camera != null){
try {
camera.setPreviewDisplay(surfaceHolder);
camera.setDisplayOrientation(90);
initPreview(width, height);
startPreview();

previewing = true;
} catch (IOException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
}

}

合影

     PictureCallback myPictureCallback_JPG = new PictureCallback(){

@Override

public void onPictureTaken(byte[] data, Camera arg1) {
// new SavePhotoTask().execute(data);
Intent myIntent = new Intent(MainActivity.this, CropActivity.class);
Bitmap bitmap = BitmapFactory.decodeByteArray(data , 0, data .length);
myIntent.putExtra("image", bitmap);
MainActivity.this.startActivity(myIntent);

}};

BMP 发送总是以旋转形式出现,但并不总是 90 度。看起来 android 4.0 不仅可以旋转而且还可以翻转图像。有没有一种好的方法来检测并确保我始终获得正确的图片?

最佳答案

mirror 和 flip 的问题被认为是 android 4.0+ 特有的,所以这个有效

Matrix rotateRight = new Matrix();
rotateRight.preRotate(90);

if(android.os.Build.VERSION.SDK_INT>13 && CameraActivity.frontCamera)
{
float[] mirrorY = { -1, 0, 0, 0, 1, 0, 0, 0, 1};
rotateRight = new Matrix();
Matrix matrixMirrorY = new Matrix();
matrixMirrorY.setValues(mirrorY);

rotateRight.postConcat(matrixMirrorY);

rotateRight.preRotate(270);

}

final Bitmap rImg= Bitmap.createBitmap(img, 0, 0,
img.getWidth(), img.getHeight(), rotateRight, true);

关于Android-从前置摄像头拍照会旋转照片,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/12853334/

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