图像保存方向错误 [英] Image saved with wrong orientation
问题描述
我使用此代码:
在 Manifest
,方向
设置为横向。
因此,它只允许用户在横向模式下拍摄照片,如果图片是通过将设备保持在纵向模式下拍摄的,则保存的图片如下所示:
90度旋转的图片
搜索解决方案后,我发现:
p $ p>
public void surfaceCreated(SurfaceHolder holder){
try {
camera = Camera.open();
camParam = camera.getParameters();
Camera.Parameters params = camera.getParameters();
String currentversion = android.os.Build.VERSION.SDK;
Log.d(System out,currentVersion+ currentversion);
int currentInt = android.os.Build.VERSION.SDK_INT;
Log.d(System out,currentVersion+ currentInt);
if(getResources()。getConfiguration()。orientation == Configuration.ORIENTATION_PORTRAIT){
if(currentInt!= 7){
camera.setDisplayOrientation(90)
} else {
Log.d(System out,Portrait+ currentInt);
params.setRotation(90);
/ *
* params.set(orientation,portrait);
* params.set(rotation,90);
* /
camera.setParameters(params);
}
}
if(getResources()。getConfiguration()。orientation == Configuration.ORIENTATION_LANDSCAPE){
// camera.setDisplayOrientation(0);
if(currentInt!= 7){
camera.setDisplayOrientation(0);
} else {
Log.d(System out,Landscape+ currentInt);
params.set(orientation,landscape);
params.set(rotation,90);
camera.setParameters(params);
}
}
camera.setPreviewDisplay(holder);
camera.startPreview();
} catch(IOException e){
Log.d(CAMERA,e.getMessage());
}
}
I am using this code:
where in Manifest
, Activity Orientation
is set to Landscape.
So, its like allowing user to take picture only in Landscape mode, and if the picture is taking by holding the device in portrait mode, the image saved is like this:
a 90 degree rotated image.
After searching for a solution, I found this:
Android - Camera preview is sideways
where the solution is:
in surfaceChanged()
check for
Display display = ((WindowManager)getSystemService(WINDOW_SERVICE)).getDefaultDisplay();
display.getRotation();
and change the Camera's displayOrientation accordingly.
camera.setDisplayOrientation(90);
But no matter how many times I rotate the device, surfaceChanged()
never gets called.
I even tried removing orientation="Landscape"
in the Manifest.xml, but then the preview itself is shown sideways(may be because default android.view.SurfaceView
is supposed to be in Landscape mode?).
Try this.
public void surfaceCreated(SurfaceHolder holder) {
try {
camera = Camera.open();
camParam = camera.getParameters();
Camera.Parameters params = camera.getParameters();
String currentversion = android.os.Build.VERSION.SDK;
Log.d("System out", "currentVersion " + currentversion);
int currentInt = android.os.Build.VERSION.SDK_INT;
Log.d("System out", "currentVersion " + currentInt);
if (getResources().getConfiguration().orientation == Configuration.ORIENTATION_PORTRAIT) {
if (currentInt != 7) {
camera.setDisplayOrientation(90);
} else {
Log.d("System out", "Portrait " + currentInt);
params.setRotation(90);
/*
* params.set("orientation", "portrait");
* params.set("rotation",90);
*/
camera.setParameters(params);
}
}
if (getResources().getConfiguration().orientation == Configuration.ORIENTATION_LANDSCAPE) {
// camera.setDisplayOrientation(0);
if (currentInt != 7) {
camera.setDisplayOrientation(0);
} else {
Log.d("System out", "Landscape " + currentInt);
params.set("orientation", "landscape");
params.set("rotation", 90);
camera.setParameters(params);
}
}
camera.setPreviewDisplay(holder);
camera.startPreview();
} catch (IOException e) {
Log.d("CAMERA", e.getMessage());
}
}
这篇关于图像保存方向错误的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!