Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/android/205.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java 将缩小的相机预览设置为具有与宽度相关的正确图像纵横比_Java_Android_Image Processing_Android Camera - Fatal编程技术网

Java 将缩小的相机预览设置为具有与宽度相关的正确图像纵横比

Java 将缩小的相机预览设置为具有与宽度相关的正确图像纵横比,java,android,image-processing,android-camera,Java,Android,Image Processing,Android Camera,因此,在我的应用程序中,我会显示一个不会占据整个屏幕的相机预览。我正在手动设置显示,但得到的图像纵横比不正确。我正在将显示器的宽度设置为当前屏幕大小的一半。然后我想设置与宽度相关的高度,并保持正确的图像纵横比。如何在保持正确比率的同时设置相机预览高度?作为预览的SurfaceView的包装。他们根据从相机中选择的预览大小的纵横比,在预览框架布局上调用setAspectRatio(),并相应地缩放曲面视图 因为PreviewFrameLayout是开源的,所以没有什么可以阻止您将其克隆到自己的项目

因此,在我的应用程序中,我会显示一个不会占据整个屏幕的相机预览。我正在手动设置显示,但得到的图像纵横比不正确。我正在将显示器的宽度设置为当前屏幕大小的一半。然后我想设置与宽度相关的高度,并保持正确的图像纵横比。如何在保持正确比率的同时设置相机预览高度?

作为预览的
SurfaceView
的包装。他们根据从
相机
中选择的预览大小的纵横比,在
预览框架布局
上调用
setAspectRatio()
,并相应地缩放
曲面视图

因为
PreviewFrameLayout
是开源的,所以没有什么可以阻止您将其克隆到自己的项目中,就像我在中所做的那样

因此,在您的例子中,您可以将
PreviewFrameLayout
设置为所需的最大大小(“当前屏幕大小的一半”,我希望您使用
LinearLayout
android:layou-weight
),教给它纵横比,将
SurfaceView
放在
PreviewFrameLayout
中,就可以开始了

请注意,您应该能够将
SurfaceView上的
android:layout\u gravity
设置为在
PreviewFrameLayout
中居中,作为预览的
SurfaceView
的包装。他们根据从
相机
中选择的预览大小的纵横比,在
预览框架布局
上调用
setAspectRatio()
,并相应地缩放
曲面视图

因为
PreviewFrameLayout
是开源的,所以没有什么可以阻止您将其克隆到自己的项目中,就像我在中所做的那样

因此,在您的例子中,您可以将
PreviewFrameLayout
设置为所需的最大大小(“当前屏幕大小的一半”,我希望您使用
LinearLayout
android:layou-weight
),教给它纵横比,将
SurfaceView
放在
PreviewFrameLayout
中,就可以开始了


请注意,您应该能够将
SurfaceView
上的
android:layout\u gravity
设置为在
PreviewFrameLayout
中居中,我使用此选项解决了问题

 private Camera.Size getBestPreviewSize(int width, int height)
{
    Camera.Size result=null;
    Camera.Parameters p = camera.getParameters();
    for (Camera.Size size : p.getSupportedPreviewSizes()) {
        if (size.width<=width && size.height<=height) {
            if (result==null) {
                result=size;
            } else {
                int resultArea=result.width*result.height;
                int newArea=size.width*size.height;

                if (newArea>resultArea) {
                    result=size;
                }
            }
        }
    }
    return result;

}
private Camera.Size getBestPreviewSize(整数宽度,整数高度)
{
Camera.Size结果=null;
Camera.Parameters p=Camera.getParameters();
用于(Camera.Size大小:p.getSupportedPreviewSizes()){

如果(size.width我用这个解决了这个问题

 private Camera.Size getBestPreviewSize(int width, int height)
{
    Camera.Size result=null;
    Camera.Parameters p = camera.getParameters();
    for (Camera.Size size : p.getSupportedPreviewSizes()) {
        if (size.width<=width && size.height<=height) {
            if (result==null) {
                result=size;
            } else {
                int resultArea=result.width*result.height;
                int newArea=size.width*size.height;

                if (newArea>resultArea) {
                    result=size;
                }
            }
        }
    }
    return result;

}
private Camera.Size getBestPreviewSize(整数宽度,整数高度)
{
Camera.Size结果=null;
Camera.Parameters p=Camera.getParameters();
用于(Camera.Size大小:p.getSupportedPreviewSizes()){

如果(size.width我能不能用一种更简单的方法来实现这一点,将
FrameLayout
设置为屏幕宽度的50%,然后设置
FrameLayout
高度,相机预览将自动填充it@WillJamieson:如果您认为这比使用为您完成所有这些任务的代码更简单,欢迎您这样做spect比率由所选的预览帧大小决定——如果您的
SurfaceView
的纵横比不相同,图像将被拉伸。我检查了您的代码,这正是我想要的。但是,我无法在纵向模式下顺利工作。您知道如何才能使其工作吗?@Ole-m:“在纵向模式下,我无法使其顺利工作”--因为我不知道“顺利”在这种情况下意味着什么,更不用说与纵向模式有什么关系了,我真的帮不了你。@Commonware:好的,我指的是纵横比。但过了一会儿我就解决了它。只需在setAspectRatio()中切换高度和宽度我能不能用一种更简单的方法,将
FrameLayout
设置为屏幕宽度的50%,然后设置
FrameLayout
高度,相机预览将自动填充it@WillJamieson:如果您认为这比使用为您完成所有这些任务的代码更简单,欢迎您这样做。请记住纵横比由选定的预览帧大小驱动——如果您的
SurfaceView
的大小与纵横比不同,则图像将被拉伸。我检查了您的代码,这正是我要查找的。但是,我无法在纵向模式下使其顺利工作。您知道如何使其工作吗?@Ole-m:“我无法在纵向模式下使其平稳运行”--因为我不知道“平稳”在这种情况下的含义,更不用说与纵向模式有什么关系了,我真的帮不了你。@Commonware:好的,我指的是纵横比。但过了一会儿我就解决了。只需在setAspectRatio()中切换高度和宽度