Android 安卓摄像头的动作很奇怪
我第一次在Android SDK中使用摄像头,就像大多数第一次出现问题一样 我有我的肖像活动,但我的相机方向很奇怪。从字面上看,它是在翻转图像的侧面。所以,如果我把手指从顶部插入,它会从预览的左侧进入。。。我已经花了很长时间修改我的代码,但没有任何东西能改变它。这是我的预习课:Android 安卓摄像头的动作很奇怪,android,camera,Android,Camera,我第一次在Android SDK中使用摄像头,就像大多数第一次出现问题一样 我有我的肖像活动,但我的相机方向很奇怪。从字面上看,它是在翻转图像的侧面。所以,如果我把手指从顶部插入,它会从预览的左侧进入。。。我已经花了很长时间修改我的代码,但没有任何东西能改变它。这是我的预习课: @Override public void surfaceChanged(SurfaceHolder holder, int f, int w, int h) { Camera.Parameters params
@Override
public void surfaceChanged(SurfaceHolder holder, int f, int w, int h) {
Camera.Parameters params = camera.getParameters();
params.setPreviewSize(w,h);
params.set("orientation", "portrait");
camera.setParameters(params);
camera.startPreview();
}
@Override
public void surfaceCreated(SurfaceHolder h) {
try {
camera = Camera.open();
camera.setPreviewDisplay(h);
camera.setPreviewCallback(new PreviewCallback(){
@Override
public void onPreviewFrame(byte[] data, Camera c) {
FileOutputStream fos = null;
try {
//if(!(new File(Environment.getExternalStorageDirectory()+"/MemeMe/Temp/").exists())){
//
//}
File memeTempPath = new File(Environment.getExternalStorageDirectory()+"/MemeMe/Temp/");
File[] tempFiles = memeTempPath.listFiles();
for(int i = 0; i < tempFiles.length; i++){
tempFiles[i].delete();
}
fos = new FileOutputStream(String.format(Environment.getExternalStorageDirectory()+"/MemeMe/Temp/"+System.currentTimeMillis()));
fos.write(data);
fos.close();
} catch (FileNotFoundException e) {
e.printStackTrace();
} catch (IOException e) {
e.printStackTrace();
}
Preview.this.invalidate();
}
});
} catch (IOException e) {
e.printStackTrace();
}
}
我对这个问题感到相当困惑。我以为预览应该根据方向改变。。。我还试着做params.setRotation(),做了我能想到的每一个旋转90180270360,但它根本没有改变它
舱单:
<uses-permission android:name="android.permission.WRITE_EXTERNAL_STORAGE" />
<uses-permission android:name="android.permission.CAMERA" />
<uses-feature android:name="android.hardware.camera" />
<uses-feature android:name="android.hardware.camera.autofocus" />
对于预览,有一种不同的方法来调整相机图像旋转。。。它在android文档中有详细的描述。它从API级别8开始提供 更新2.1(7级): 在2.2之前,此代码通常有效
Camera.Parameters parameters = camera.getParameters();
parameters.set("orientation", "portrait"); // for some
parameters.set("rotation", 90); // for others
// or parameters.setRotation(90);
camera.setParameters(parameters);
问题是,它似乎在某些使用2.2+的设备上停止工作,因此如果确实需要支持2.1+,可以尝试对setDisplayOrientation
进行反射,如果反射失败,则设置“orientation”
参数
void setDisplayOrientation(Camera camera, int angle){
try {
Method method = camera.getClass().getMethod("setDisplayOrientation", new Class[] { int.class });
if (method != null) {
method.invoke(camera, new Object[] { angle });
return;
}
} catch (Exception e) {}
Camera.Parameters parameters = camera.getParameters();
parameters.set("orientation", "portrait");
parameters.set("rotation", 90);
camera.setParameters(parameters);
}
我应该在上面说,对不起,我使用的是API 7
void setDisplayOrientation(Camera camera, int angle){
try {
Method method = camera.getClass().getMethod("setDisplayOrientation", new Class[] { int.class });
if (method != null) {
method.invoke(camera, new Object[] { angle });
return;
}
} catch (Exception e) {}
Camera.Parameters parameters = camera.getParameters();
parameters.set("orientation", "portrait");
parameters.set("rotation", 90);
camera.setParameters(parameters);
}