gpt4 book ai didi

android - 摄像头方向在 android 中不正确

转载 作者:行者123 更新时间:2023-11-29 02:06:10 30 4
gpt4 key购买 nike

我正在使用自定义相机和表面 View 来捕捉图像,但问题是相机方向不正确,以下是我的代码,很抱歉我的英语沟通不好。

public class Camera_Activity extends Activity implements
SurfaceHolder.Callback {
private Camera camera = null;
private SurfaceView cameraSurfaceView = null;
private SurfaceHolder cameraSurfaceHolder = null;
private boolean previewing = false;

private Display display = null;

private static int wid = 0, hgt = 0;

private LayoutInflater layoutInflater = null;
private View cameraViewControl = null;
private LayoutParams layoutParamsControl = null;

private Button btnCapture = null;
ImageView mImgView1;

@Override
protected void onCreate(Bundle savedInstanceState) {
// TODO Auto-generated method stub
super.onCreate(savedInstanceState);

setRequestedOrientation(ActivityInfo.SCREEN_ORIENTATION_PORTRAIT);

display = getWindowManager().getDefaultDisplay();
wid = display.getWidth();
hgt = display.getHeight();

getWindow().setFormat(PixelFormat.TRANSLUCENT);
requestWindowFeature(Window.FEATURE_NO_TITLE);
getWindow().setFlags(WindowManager.LayoutParams.FLAG_FULLSCREEN,
WindowManager.LayoutParams.FLAG_FULLSCREEN);

setContentView(R.layout.camera);

mImgView1 = (ImageView) findViewById(R.id.mImgView1);

mImgView1.setImageResource(R.drawable.first_leg);

cameraSurfaceView = (SurfaceView) findViewById(R.id.cameraSurfaceView);
cameraSurfaceHolder = cameraSurfaceView.getHolder();
cameraSurfaceHolder.addCallback(this);
cameraSurfaceHolder.setType(SurfaceHolder.SURFACE_TYPE_PUSH_BUFFERS);

layoutInflater = LayoutInflater.from(getBaseContext());
layoutParamsControl = new LayoutParams(LayoutParams.FILL_PARENT,
LayoutParams.FILL_PARENT);

cameraViewControl = layoutInflater.inflate(R.layout.cambutton, null);
this.addContentView(cameraViewControl, layoutParamsControl);

cameraViewControl = layoutInflater.inflate(R.layout.vampireimage, null);
this.addContentView(cameraViewControl, layoutParamsControl);

btnCapture = (Button) findViewById(R.id.btnCapture);
btnCapture.setOnClickListener(new OnClickListener() {
@Override
public void onClick(View v) {
// TODO Auto-generated method stub
camera.takePicture(cameraShutterCallback,
cameraPictureCallbackRaw, cameraPictureCallbackJpeg);
}
});
}

ShutterCallback cameraShutterCallback = new ShutterCallback() {
@Override
public void onShutter() {
// TODO Auto-generated method stub
System.out.println("Hello Shutter");
}
};

PictureCallback cameraPictureCallbackRaw = new PictureCallback() {
@Override
public void onPictureTaken(byte[] data, Camera camera) {
// TODO Auto-generated method stub
System.out.println("Hello Picture");
}
};

PictureCallback cameraPictureCallbackJpeg = new PictureCallback() {
@Override
public void onPictureTaken(byte[] data, Camera camera) {
// TODO Auto-generated method stub
Bitmap cameraBitmap = BitmapFactory.decodeByteArray(data, 0,
data.length);

wid = cameraBitmap.getWidth();
hgt = cameraBitmap.getHeight();

Bitmap newImage = Bitmap.createBitmap(wid, hgt,
Bitmap.Config.ARGB_8888);

Canvas canvas = new Canvas(newImage);

canvas.drawBitmap(cameraBitmap, 0f, 0f, null);

Constants.mImageBitmap.clear();
Constants.mImageBitmap.add(cameraBitmap);

File storagePath = new File(
Environment.getExternalStorageDirectory() + "/Photos/");
storagePath.mkdirs();

File myImage = new File(storagePath, "1.jpg");

try {
FileOutputStream out = new FileOutputStream(myImage);
newImage.compress(Bitmap.CompressFormat.JPEG, 80, out);
out.flush();
out.close();
} catch (FileNotFoundException e) {
Log.d("In Saving File", e + "");
} catch (IOException e) {
Log.d("In Saving File", e + "");
}

camera.startPreview();

newImage.recycle();
newImage = null;

// cameraBitmap.recycle();
// cameraBitmap = null;

Intent mInPreview = new Intent(Camera_Activity.this,
Preview_Activity.class);
mInPreview.putExtra("Value", "First");
startActivity(mInPreview);
finish();
}
};

@Override
public void surfaceChanged(SurfaceHolder holder, int format, int width,
int height) {
// TODO Auto-generated method stub
if (previewing) {
camera.stopPreview();
previewing = false;
System.out.println("Hello 2");
}
try {
Camera.Parameters parameters = camera.getParameters();
Display display = ((WindowManager) getSystemService(WINDOW_SERVICE))
.getDefaultDisplay();

if (display.getRotation() == Surface.ROTATION_0) {
parameters.setPreviewSize(height, width);
camera.setDisplayOrientation(90);
}

if (display.getRotation() == Surface.ROTATION_90) {
parameters.setPreviewSize(width, height);
}

if (display.getRotation() == Surface.ROTATION_180) {
parameters.setPreviewSize(height, width);
}

if (display.getRotation() == Surface.ROTATION_270) {
parameters.setPreviewSize(width, height);
camera.setDisplayOrientation(180);
}
camera.setParameters(parameters);

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

@Override
public void surfaceCreated(SurfaceHolder holder) {
// TODO Auto-generated method stub
try {
camera = Camera.open();
} catch (RuntimeException e) {
Toast.makeText(
getApplicationContext(),
"Device camera is not working properly, please try after sometime.",
Toast.LENGTH_LONG).show();
}
}

@Override
public void surfaceDestroyed(SurfaceHolder holder) {
// TODO Auto-generated method stub
System.out.println("Hello 3");
camera.stopPreview();
camera.release();
camera = null;
previewing = false;
}

@Override
public void onBackPressed() {
// TODO Auto-generated method stub
super.onBackPressed();
AlertDialog.Builder alert = new AlertDialog.Builder(this);
alert.setTitle("3DSoles");
alert.setMessage("Do U Want to Exit?");
alert.setNegativeButton("No", new DialogInterface.OnClickListener() {

@Override
public void onClick(DialogInterface dialog, int which) {
// TODO Auto-generated method stub

}
});

alert.setPositiveButton("Yes", new DialogInterface.OnClickListener() {

@Override
public void onClick(DialogInterface dialog, int which) {
// TODO Auto-generated method stub
finish();
}
});
}

@Override
public boolean onKeyDown(int keyCode, KeyEvent event) {
// TODO Auto-generated method stub
if (keyCode == KeyEvent.KEYCODE_BACK) {
AlertDialog.Builder alert = new AlertDialog.Builder(this);
alert.setTitle("3DSoles");
alert.setMessage("Do U Want to Exit?");
alert.setNegativeButton("No",
new DialogInterface.OnClickListener() {

@Override
public void onClick(DialogInterface dialog, int which) {
// TODO Auto-generated method stub

}
});

alert.setPositiveButton("Yes",
new DialogInterface.OnClickListener() {

@Override
public void onClick(DialogInterface dialog, int which) {
// TODO Auto-generated method stub
finish();
}
});
}
return super.onKeyDown(keyCode, event);
}
}

最佳答案

  1. Camera 类预计不支持 setPreview(height, width)

  2. 参见 http://developer.android.com/reference/android/hardware/Camera.html#setDisplayOrientation%28int%29用于选择 Camera.setDisplayOrientation()

  3. 的官方方式
  4. 从 API 14(ICS 及更高版本)开始,相机有望支持 setDisplayOrientation() 而无需中断预览。

  5. 对于较旧的平台,我建议在相机预览处于 Activity 状态时禁用方向更改;相机重置 (stopPreview() + startPreview) 可能需要很长时间才能使 UX 变得友好。通常,预览 Activity 要么使用固定方向,要么“模拟”软件方向变化以响应加速度计事件。

关于android - 摄像头方向在 android 中不正确,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/9922850/

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