我正在使用预览来显示相机在屏幕上看到的内容.
我可以使一切工作正常,表面创建,表面设置和表面显示.
但是,在纵向模式下,它始终以不正确的90度角显示图像.
如图中所示:

我知道使用以下代码将直接设置图片:
setRequestedOrientation(ActivityInfo.SCREEN_ORIENTATION_LANDSCAPE);
Run Code Online (Sandbox Code Playgroud)
但是我在Activity中有预览,其中包含其他元素,并且我的Activity在横向模式下显示没有意义.(默认禁用)
所以我想知道是否只是改变预览的方向?并在"纵向"模式下正确显示我的其余活动?
或者无论如何旋转预览以便正确显示?
我的相机应用程序在屏幕上显示相机预览,并在后台处理它.以下是相关代码,尽可能压缩(例如,没有显示错误处理或字段声明):
public final class CameraView extends SurfaceView implements
SurfaceHolder.Callback, Runnable, PreviewCallback {
public CameraView(Context context, AttributeSet attrs) {
super(context, attrs);
mHolder = getHolder();
mHolder.addCallback(this);
mHolder.setType(SurfaceHolder.SURFACE_TYPE_PUSH_BUFFERS);
void openCamera() {
// Called from parent activity after setting content view to CameraView
mCamera = Camera.open();
mCamera.setPreviewCallbackWithBuffer(this);
}
public void surfaceCreated(SurfaceHolder holder) {
new Thread(this).start();
// Set CameraView to the optimal camera preview size
final Camera.Parameters params = mCamera.getParameters();
final List<Camera.Size> sizes = params.getSupportedPreviewSizes();
final int screenWidth = ((View) getParent()).getWidth();
int minDiff = Integer.MAX_VALUE; …Run Code Online (Sandbox Code Playgroud) 在OpenCV上使用类VideoCapture时如何旋转相机?(Android上的样本人脸检测).我正在旋转画布:
if (getResources().getConfiguration().orientation == Configuration.ORIENTATION_PORTRAIT)
{
Matrix matrix = new Matrix();
matrix.preTranslate(
(canvas.getWidth() - bmp.getWidth()) / 2,
(canvas.getHeight() - bmp.getHeight()) / 2);
matrix.postRotate(270f, (canvas.getWidth()) / 2,
(canvas.getHeight()) / 2);
canvas.drawBitmap(bmp, matrix, null);
}
Run Code Online (Sandbox Code Playgroud)
但来自相机的图像不会旋转:面部检测不起作用.
摄像机从以下位置接收流:
protected Bitmap processFrame(VideoCapture capture) {
capture.retrieve(mRgba, Highgui.CV_CAP_ANDROID_COLOR_FRAME_RGBA);
capture.retrieve(mGray,
Highgui.CV_CAP_ANDROID_GREY_FRAME);
Run Code Online (Sandbox Code Playgroud)
更新我做了以下事情:
@Override
protected Bitmap processFrame(VideoCapture capture) {
if (getResources().getConfiguration().orientation == Configuration.ORIENTATION_PORTRAIT) {
Core.flip(mRgba.t(), mRgba, 0);
}
else {
}
capture.retrieve(mRgba, Highgui.CV_CAP_ANDROID_COLOR_FRAME_RGBA);
capture.retrieve(mDetect_thread.mGray,
Highgui.CV_CAP_ANDROID_GREY_FRAME);
Run Code Online (Sandbox Code Playgroud)
但是不行.当我在portret方向运行程序(在Android设备上) - 程序不启动当我以横向方向运行rogram - 程序工作,但当我旋转设备,程序工作,但显示图像不旋转