我尝试了几项尝试让相机预览在SurfaceView
上以纵向显示。没有任何效果。我正在测试具有2.0.1的Droid。我试过了:
1)强制布局为肖像:this.setRequestedOrientation(ActivityInfo.SCREEN_ORIENTATION_LANDSCAPE);
2)使用
Camera.Parameters parameters = camera.getParameters();
parameters.set("orientation", "portrait");
parameters.setRotation(90);
camera.setParameters(parameters);
我还能尝试别的吗?如果这是Android或手机中的错误,我如何确保这种情况,以便我有证据通知客户?
谢谢, 人员Prasanna
答案 0 :(得分:64)
从API lvl 8开始,可以使用:
public final void setDisplayOrientation(int degrees)
即。与清单中的肖像:
public void surfaceCreated(SurfaceHolder holder) {
mCamera = Camera.open();
mCamera.setDisplayOrientation(90);
答案 1 :(得分:11)
我有一个适用于纵向模式的工作解决方案,工作在2.1(在Desire上测试)可能更少。
活动屏幕方向设置为纵向。 (机器人:screenOrientation = “纵向”)
相机参数:
Camera.Parameters p = mCamera.getParameters();
p.set("jpeg-quality", 100);
p.set("orientation", "landscape");
p.set("rotation", 90);
p.setPictureFormat(PixelFormat.JPEG);
p.setPreviewSize(h, w);// here w h are reversed
mCamera.setParameters(p);
并且图像将是肖像。
用于相机的SurfaceHolder必须与手机预览尺寸兼容 通常的屏幕分辨率。
有趣的欲望2.2不起作用...... 这是修复:
At surfaceCreated(..) or when you have this line
camera = Camera.open();
add
camera.setDisplayOrientation(90);//only 2.2>
Camera.Parameters p = camera.getParameters();
p.set("jpeg-quality", 100);
p.setRotation(90);
p.setPictureFormat(PixelFormat.JPEG);
p.setPreviewSize(h, w);
camera.setParameters(p);
答案 2 :(得分:10)
你可以尝试这个(适用于2.2或以下)。在这里我旋转图像,然后将其保存到SD卡。但它仅适用于肖像模式。如果您必须为两种模式制作它,那么您应该检查相机方向并在捕获图像之前进行一些检查。
PictureCallback jpegCallback = new PictureCallback() {
public void onPictureTaken(byte[] data, Camera camera) {
FileOutputStream outStream = null;
try {
imageFilePath = getFilename();
InputStream is = new ByteArrayInputStream(data);
Bitmap bmp = BitmapFactory.decodeStream(is);
// Getting width & height of the given image.
if (bmp != null){
int w = bmp.getWidth();
int h = bmp.getHeight();
// Setting post rotate to 90
Matrix mtx = new Matrix();
mtx.postRotate(90);
// Rotating Bitmap
Bitmap rotatedBMP = Bitmap.createBitmap(bmp, 0, 0, w, h, mtx, true);
ByteArrayOutputStream stream = new ByteArrayOutputStream();
rotatedBMP.compress(Bitmap.CompressFormat.PNG, 100, stream);
byte[] byteArray = stream.toByteArray();
outStream = new FileOutputStream
(String.format(imageFilePath,System.currentTimeMillis()));
outStream.write(byteArray);
outStream.close();
} else {
outStream = new FileOutputStream
(String.format(imageFilePath,System.currentTimeMillis()));
outStream.write(data);
outStream.close();
}
preview.camera.startPreview();
} catch (FileNotFoundException e) {
e.printStackTrace();
} catch (IOException e) {
e.printStackTrace();
} finally {
}
}
};
答案 3 :(得分:2)
目前很多设备都无法做到这一点,包括G1和Droid。在这里查看相关的错误报告:
另见Android工程师之一的评论(Dave):
答案 4 :(得分:0)
罗马给出的问题线程链接有一个可行的解决方案,我现在正在使用。
在此处找到它: http://code.google.com/p/android/issues/detail?id=1193#c26
答案 5 :(得分:0)
在您需要明确地执行此操作之前,无需为方向设置任何参数。默认情况下,它支持此功能。在我的情况下,我有一个活动和上面的活动,我有一个相机视图,所以我没有设置相机属性的任何方向,而是我在Manifest文件中将方向设置为肖像的活动。现在该应用程序看起来和工作良好。可能对某人有帮助..
感谢。