我正在做一个应用程序,需要设备(通常是平板电脑)才能处于横向状态,但图片必须在屏幕上以纵向显示。
直到这里,我已经完成了。现在,当我拍照时,“预览”图像显示在landsacape中,看起来很奇怪。
见图片看我的意思:
拍摄前如何看待图片:
拍摄照片之后:
我不知道如何解决它
多数表面视图:
@Override
public void surfaceChanged(SurfaceHolder holder, int format, int width, int height) {
// stop Preview Before making changes
try {
mCamera.stopPreview();
} catch (Exception e) {
// ignored: is trying to stop a non-existent preview
}
try {
mCamera.setPreviewDisplay(mHolder);
mCamera.startPreview();
} catch (Exception e) {
Log.d("CAMERAPREVIEW", "Error starting camera preview : " + e.getMessage());
}
}
方法覆盖了
private PictureCallback mPicture = new PictureCallback() {
@Override
public void onPictureTaken(byte[] data, Camera camera) {
File pictureFile = getOutputMediaFile(MEDIA_TYPE_IMAGE);
if (pictureFile == null) {
Log.d(TAG, "Error creating media file, check storage permissions: ");
return;
}
try {
FileOutputStream fos = new FileOutputStream(pictureFile);
fos.write(data);
fos.close();
// Not used for the moment
// Intent returnIntent = new Intent();
// setResult(RESULT_CANCELED, returnIntent);
// finish();
} catch (FileNotFoundException e) {
Log.d(TAG, "File not found: " + e.getMessage());
} catch (IOException e) {
Log.d(TAG, "Error accessing file: " + e.getMessage());
}
}
};
答案 0 :(得分:0)
您可以使用Camera.setDisplayOrientaion()
旋转SurfaceView
上的预览。但这不会影响捕获的图像。您的帖子没有透露您如何从文件中显示捕获的图像(我假设这是您在second picture中显示的内容)。如果将其作为位图加载到ImageView
中,则可以请求旋转位图。
看起来您的图片尺寸与预览的宽高比不同。我建议您查看最近的讨论here。
但也许我误解了你在做什么。也许您的问题是您没有在onPicturetaken()
重启预览?