相关疑难解决方法(0)

Android - 相机预览是侧面的

我正在使用预览来显示相机在屏幕上看到的内容.

我可以使一切工作正常,表面创建,表面设置和表面显示.

但是,在纵向模式下,它始终以不正确的90度角显示图像.

如图中所示:

替代文字

我知道使用以下代码将直接设置图片:

setRequestedOrientation(ActivityInfo.SCREEN_ORIENTATION_LANDSCAPE);
Run Code Online (Sandbox Code Playgroud)

但是我在Activity中有预览,其中包含其他元素,并且我的Activity在横向模式下显示没有意义.(默认禁用)

所以我想知道是否只是改变预览的方向?并在"纵向"模式下正确显示我的其余活动?

或者无论如何旋转预览以便正确显示?

camera android portrait preview orientation

123
推荐指数
3
解决办法
9万
查看次数

如何正确设置Android相机方向?

我想根据Android中的设备方向设置相机方向,但似乎没有任何效果.我尝试旋转Surface以及相机参数,但是纵向模式下的相机预览总是颠倒过来.我需要顺时针旋转90度才能使其正确.这是我现在使用的代码,仅适用于横向模式.

    SurfaceHolder.Callback surfaceCallback = new SurfaceHolder.Callback() {

    @Override
    public void surfaceDestroyed(SurfaceHolder holder) {
        camera.stopPreview();
        camera.release();
        camera = null;
    }

    @Override
    public void surfaceCreated(SurfaceHolder holder) {          
        initCamera();           
    }

    private Size getOptimalPreviewSize(List<Size> sizes, int w, int h) {
        final double ASPECT_TOLERANCE = 0.2;
        double targetRatio = (double) w / h;
        if (sizes == null)
            return null;

        Size optimalSize = null;
        double minDiff = Double.MAX_VALUE;

        int targetHeight = h;

        // Try to find an size match aspect ratio and size
        for (Size size …
Run Code Online (Sandbox Code Playgroud)

camera android orientation surfaceview

87
推荐指数
7
解决办法
16万
查看次数

在Android上的纵向模式中的Zxing相机

我想portraitZxing相机上显示方向.

如何才能做到这一点?

android zxing landscape-portrait

40
推荐指数
3
解决办法
4万
查看次数

android摄像头surfaceview方向

好的,我有一个扩展SurfaceView和覆盖的类

surfaceChanged - 只需调用startPreview
surfaceCreated - 打开相机,编辑params*,设置surfaceHolder
surfaceDestroyed - 调用stopPreview,释放相机

这一切都很有效,因为当方向是肖像:

来自surfaceCreated*

m_camera = Camera.open();
Camera.Parameters p = m_camera.getParameters();

if (getResources().getConfiguration().orientation != 
    Configuration.ORIENTATION_LANDSCAPE)
{
    p.set("orientation", "portrait");

    // CameraApi is a wrapper to check for backwards compatibility  
    if (CameraApi.isSetRotationSupported())
    {
         CameraApi.setRotation(p, 90);
    }
}
Run Code Online (Sandbox Code Playgroud)

但是,每次方向改变时,它都会调用Camera.open()......正如您所知,这是一项非常昂贵的操作,导致转换不是那么顺利.

当我强制定位到横向时,预览很棒.创建只调用一次,因为预览是横向的,相机始终是用户看到的.但是,我需要一种方法来设置纵向拍摄时实际拍摄的照片的方向.当我强制横向渲染时,表面永远不会被重新创建,并且当相机以纵向方式保持时,参数永远不会被设置.

那么如何才能完成以下任一项(专门)?

  1. 当方向发生变化时,保持 onDestroy和onCreate之间的m_camera,以便过渡平滑

  2. 强制风景和检测方向改变另一种方式...旋转最终的snaped图片,如果保持纵向.

此外,如果我离开基地,有人能指出我更好的方向吗?谢谢.

android smartphone orientation android-sdk-2.1 android-camera

29
推荐指数
2
解决办法
5万
查看次数

Android:纵向模式下的相机预览方向

我正在使用相机仅显示预览(不拍照或录制视频).

应用程序始终处于纵向模式(禁用横向模式).相机预览总是旋转90度ccw我无法改变它(无论是setDisplayOrientation也不是p.set("orientation", "portrait" )p.set("rotation", 90) ).

预览总是像这样旋转还是依赖于设备?如果在纵向模式下总是如此,我可以随后旋转图像.

或者有没有办法正确设置相机?我已经阅读了很多有关此问题的帖子,但没有回答对我有用(Galaxy s2,Android v2.3)

camera android portrait rotation orientation

16
推荐指数
2
解决办法
4万
查看次数

纵向模式下的相机setDisplayOrientation()打破纵横比

我试图让相机预览在纵向模式下正常工作,其中活动本身可以正常改变方向(即,不被锁定到风景).

但是,使用setDisplayOrientation()严重打破了预览的行为.

这可以通过谷歌自己的ApiDemos来证明.第一个图像基于示例项目CameraPreviewandroid-17版本ApiDemos,其中我做的唯一更改是android:orientation="landscape"从清单中的此活动的条目中删除.下图是运行Android 4.2的Nexus 4显示屏上显示的内容的屏幕截图,相机指向一张8.5平方英寸的纸张:

Nexus 4 ApiDemos预览,纵向模式

该预览中不明显的是它旋转了90度.您在图像最右侧看到的袜子包裹的脚实际上位于正方形下方.

对此,至少对于横向模式,解决方案是使用setDisplayOrientation().但是,如果修改了Preview内部类的CameraPreviewmCamera.setDisplayOrientation(90);,你会得到这样的:

Nexus 4 ApiDemos预览,纵向模式,带setDisplayOrientation(90)

值得注意的是,广场不再是正方形.

它使用与SurfaceView以前相同的大小.我已经使用其他一些代码重现了这个场景ApiDemos,并且我TextureView在该代码中得到了相同的行为.

我简单地想到问题可能是getSupportedPreviewSizes()基于可能会返回不同的值setDisplayOrientation(),但快速测试表明情况并非如此.

任何人都知道如何setDisplayOrientation()在纵向模式下工作而不会破坏图像的宽高比推到预览中?

谢谢!

android android-camera

15
推荐指数
1
解决办法
1万
查看次数

三星Galaxy S3,S4,S5的Android相机/图片方向问题

我正在为Android API 16到21开发相机应用程序,其主要目的是拍摄肖像照片.我可以用几个设备(Nexus 4,Nexus 5,HTC ......)拍照并正确定位(意味着我的预览等于拍摄的照片尺寸和方向).

但是我已经在其他几个设备上测试了我的应用程序,其中一些设备给我带来了很多麻烦:三星Galaxy S3/S4/S5.

在这三个设备上,预览正确显示,但方法返回的图片onPictureTaken(final byte[] jpeg, Camera camera)始终是侧面的.

这是byte[] jpeg在将ImageView保存到磁盘之前从我的用户创建并在ImageView中显示的位图:

预习

这是保存在磁盘上的图像:

磁盘

正如您所看到的,图像在预览中完全拉伸,并且一旦保存在磁盘上就会错误地旋转.

这是我的CameraPreview类(我混淆了其他方法,因为它们与相机参数无关):

public class CameraPreview extends SurfaceView implements SurfaceHolder.Callback
{
    private SurfaceHolder surfaceHolder;
    private Camera camera;

    // Removed unnecessary code

    public void surfaceCreated(SurfaceHolder holder)
    {
        camera.setPreviewDisplay(holder);
        setCameraParameters();
        camera.startPreview();
    }

    private void setCameraParameters()
    {
        Camera.Parameters parameters = camera.getParameters();
        Camera.CameraInfo info = new Camera.CameraInfo();
        Camera.getCameraInfo(Camera.CameraInfo.CAMERA_FACING_BACK, info);

        DisplayMetrics metrics = new DisplayMetrics();
        WindowManager windowManager = (WindowManager)getContext().getSystemService(Context.WINDOW_SERVICE);
        windowManager.getDefaultDisplay().getMetrics(metrics);
        int rotation = windowManager.getDefaultDisplay().getRotation(); …
Run Code Online (Sandbox Code Playgroud)

android android-camera samsung-galaxy-camera

11
推荐指数
1
解决办法
9752
查看次数

Android相机旋转

我有一个摩托罗拉Defy OS Android 2.1,我用相机预览版制作了一个应用程序.问题是相机在搭载Android 2.1的三星Galaxy S上工作正常,但在摩托罗拉上,相机旋转90度.我试过这样做:

Parameters parameters = camera.getParameters();
parameters.setRotation(90);
Run Code Online (Sandbox Code Playgroud)

但它不起作用.我还没有找到任何解决方案.

android android-camera

8
推荐指数
2
解决办法
4万
查看次数