Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/sql-server-2008/3.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
Android定制摄像头设置焦点区域和设置计量区域在三星设备上不起作用_Android_Camera_Samsung Mobile_Setfocus_Metering - Fatal编程技术网

Android定制摄像头设置焦点区域和设置计量区域在三星设备上不起作用

Android定制摄像头设置焦点区域和设置计量区域在三星设备上不起作用,android,camera,samsung-mobile,setfocus,metering,Android,Camera,Samsung Mobile,Setfocus,Metering,也许这个问题重复了另一个问题,但其他问题我还没有找到解决办法。我正在尝试编写一个定制的android摄像头,该摄像头在我的设备(HTC One)上运行良好。我尝试了一些不同的设备,并在其中一个设备上运行。但是我在三星设备上遇到了问题。请勿关闭设备上的自动对焦功能。因此,设备不能改变焦点区域。那是我的触摸事件 @Override public boolean onTouchEvent(final MotionEvent event){ Camera.Parameters cameraPa

也许这个问题重复了另一个问题,但其他问题我还没有找到解决办法。我正在尝试编写一个定制的android摄像头,该摄像头在我的设备(HTC One)上运行良好。我尝试了一些不同的设备,并在其中一个设备上运行。但是我在三星设备上遇到了问题。请勿关闭设备上的自动对焦功能。因此,设备不能改变焦点区域。那是我的触摸事件

@Override
public boolean onTouchEvent(final MotionEvent event){

    Camera.Parameters cameraParameters = camera.getParameters();
    if (event.getAction() == MotionEvent.ACTION_UP){
        focusAreas.clear();
        meteringAreas.clear();
        Rect focusRect = calculateTapArea(event.getX(), event.getY(), 1f);
        Rect meteringRect = calculateTapArea(event.getX(), event.getY(), 1.5f);
        focusAreas.add(new Camera.Area(focusRect, 800));
        meteringAreas.add(new Camera.Area(meteringRect, 800));
        cameraParameters.setFocusAreas(focusAreas);
        cameraParameters.setMeteringAreas(meteringAreas);
        cameraParameters.setFocusMode(Camera.Parameters.FOCUS_MODE_MACRO);
        try{
            camera.setParameters(cameraParameters);

        } catch(Exception e){
            Log.e("Focus problem", e.toString());
            return false;
        }

        camera.autoFocus(new Camera.AutoFocusCallback() {                   
            @Override
            public void onAutoFocus(boolean success, Camera camera) {
                camera.cancelAutoFocus();
                Camera.Parameters  params = camera.getParameters();
                if(params.getFocusMode() != Camera.Parameters.FOCUS_MODE_CONTINUOUS_PICTURE){
                    params.setFocusMode(Camera.Parameters.FOCUS_MODE_CONTINUOUS_PICTURE);
                    camera.setParameters(params);
                }
            }
        });

        focusSound = new MediaPlayer();
        showSquareFocus();
        try {
            AssetFileDescriptor descriptor = this.getApplicationContext().getAssets()
                    .openFd("focus.wav");
            focusSound.setDataSource(descriptor.getFileDescriptor(),
                    descriptor.getStartOffset(), descriptor.getLength());
            descriptor.close();
            focusSound.prepare();
            focusSound.setLooping(false);
            focusSound.start();
            focusSound.setVolume(10,10);
            focusSound.setOnCompletionListener(new OnCompletionListener(){
                public void onCompletion(MediaPlayer mp){
                    mp.release();
                  }
                });
        } catch (IllegalArgumentException e) {
            e.printStackTrace();
        } catch (IllegalStateException e) {
            e.printStackTrace();
        } catch (IOException e) {
            e.printStackTrace();
        }
    }
    return true;
}
也许你需要这个密码

private Rect calculateTapArea(float x, float y, float coefficient) {
        int areaSize = Float.valueOf(FOCUS_AREA_SIZE * coefficient).intValue();
        int left = clamp((int) x - areaSize / 2, 0, width - areaSize);
        int top = clamp((int) y - areaSize / 2, 0, height - areaSize);
        RectF rectF = new RectF(left, top, left + areaSize, top + areaSize);
        matrix.mapRect(rectF);
        return new Rect(Math.round(rectF.left), Math.round(rectF.top), Math.round(rectF.right), Math.round(rectF.bottom));
    }

    private int clamp(int x, int min, int max) {
        if (x > max) {
            return max;
        }
        if (x < min) {
            return min;
        }
        return x;
    }
private Rect calculateParea(浮点x、浮点y、浮点系数){
intAreaSize=Float.valueOf(焦点面积大小*系数).intValue();
int left=夹具((int)x-面积大小/2,0,宽度-面积大小);
int top=夹具((int)y-面积大小/2,0,高度-面积大小);
RectF RectF=新的RectF(左、上、左+面积大小、上+面积大小);
matrix.mapRect(rectF);
返回新的Rect(Math.round(rectF.left)、Math.round(rectF.top)、Math.round(rectF.right)、Math.round(rectF.bottom));
}
专用int夹(int x、int min、int max){
如果(x>最大值){
返回最大值;
}
如果(x
我在三星Galaxy S3上也遇到过同样的问题。 我找到的解决方案(即使是脏的)是在所需的聚焦模式之前设置另一种聚焦模式

private void setFocusMode(final Camera camera, final String newFocusMode)
{
    // Apply an alternative focus mode

    Camera.Parameters parameters = camera.getParameters();
    final List<String> focusModes = parameters.getSupportedFocusModes();

    if (focusModes.contains(Parameters.FOCUS_MODE_FIXED) && newFocusMode.compareToIgnoreCase(Parameters.FOCUS_MODE_FIXED) == false)
    {
        parameters.setFocusMode(Parameters.FOCUS_MODE_FIXED);
    }
    else if (focusModes.contains(Parameters.FOCUS_MODE_INFINITY) && newFocusMode.compareToIgnoreCase(Parameters.FOCUS_MODE_INFINITY) == false)
    {
        parameters.setFocusMode(Parameters.FOCUS_MODE_INFINITY);
    }
    else if (focusModes.contains(Parameters.FOCUS_MODE_MACRO) && newFocusMode.compareToIgnoreCase(Parameters.FOCUS_MODE_MACRO) == false)
    {
        parameters.setFocusMode(Parameters.FOCUS_MODE_MACRO);
    }
    else if (focusModes.contains(Parameters.FOCUS_MODE_AUTO) && newFocusMode.compareToIgnoreCase(Parameters.FOCUS_MODE_AUTO) == false)
    {
        parameters.setFocusMode(Parameters.FOCUS_MODE_AUTO);
    }

    camera.setParameters(parameters);

    // Now apply the desired focus mode

    parameters = camera.getParameters();
    parameters.setFocusMode(newFocusMode);
    camera.setParameters(parameters);
}
private void setFocusMode(最终摄像机、最终字符串newFocusMode)
{
//应用另一种聚焦模式
Camera.Parameters=Camera.getParameters();
最终列表focusModes=parameters.getSupportedFocusModes();
if(focusModes.contains(Parameters.FOCUS\u MODE\u FIXED)和&newFocusMode.compareTignoreCase(Parameters.FOCUS\u MODE\u FIXED)=false)
{
parameters.setFocusMode(parameters.FOCUS\u MODE\u FIXED);
}
else if(focusModes.contains(Parameters.FOCUS_MODE_INFINITY)&&newFocusMode.compareTignoreCase(Parameters.FOCUS_MODE_INFINITY)=false)
{
parameters.setFocusMode(parameters.FOCUS_MODE_INFINITY);
}
else if(focusModes.contains(Parameters.FOCUS\u MODE\u MACRO)&&newFocusMode.compareTignoreCase(Parameters.FOCUS\u MODE\u MACRO)==false)
{
parameters.setFocusMode(parameters.FOCUS\u MODE\u宏);
}
else if(focusModes.contains(Parameters.FOCUS\u MODE\u AUTO)和&newFocusMode.compareTignoreCase(Parameters.FOCUS\u MODE\u AUTO)=false)
{
parameters.setFocusMode(parameters.FOCUS\u MODE\u AUTO);
}
设置参数(参数);
//现在应用所需的聚焦模式
parameters=camera.getParameters();
参数setFocusMode(newFocusMode);
设置参数(参数);
}

我在三星Galaxy S3上也遇到过同样的问题。 我找到的解决方案(即使是脏的)是在所需的聚焦模式之前设置另一种聚焦模式

private void setFocusMode(final Camera camera, final String newFocusMode)
{
    // Apply an alternative focus mode

    Camera.Parameters parameters = camera.getParameters();
    final List<String> focusModes = parameters.getSupportedFocusModes();

    if (focusModes.contains(Parameters.FOCUS_MODE_FIXED) && newFocusMode.compareToIgnoreCase(Parameters.FOCUS_MODE_FIXED) == false)
    {
        parameters.setFocusMode(Parameters.FOCUS_MODE_FIXED);
    }
    else if (focusModes.contains(Parameters.FOCUS_MODE_INFINITY) && newFocusMode.compareToIgnoreCase(Parameters.FOCUS_MODE_INFINITY) == false)
    {
        parameters.setFocusMode(Parameters.FOCUS_MODE_INFINITY);
    }
    else if (focusModes.contains(Parameters.FOCUS_MODE_MACRO) && newFocusMode.compareToIgnoreCase(Parameters.FOCUS_MODE_MACRO) == false)
    {
        parameters.setFocusMode(Parameters.FOCUS_MODE_MACRO);
    }
    else if (focusModes.contains(Parameters.FOCUS_MODE_AUTO) && newFocusMode.compareToIgnoreCase(Parameters.FOCUS_MODE_AUTO) == false)
    {
        parameters.setFocusMode(Parameters.FOCUS_MODE_AUTO);
    }

    camera.setParameters(parameters);

    // Now apply the desired focus mode

    parameters = camera.getParameters();
    parameters.setFocusMode(newFocusMode);
    camera.setParameters(parameters);
}
private void setFocusMode(最终摄像机、最终字符串newFocusMode)
{
//应用另一种聚焦模式
Camera.Parameters=Camera.getParameters();
最终列表focusModes=parameters.getSupportedFocusModes();
if(focusModes.contains(Parameters.FOCUS\u MODE\u FIXED)和&newFocusMode.compareTignoreCase(Parameters.FOCUS\u MODE\u FIXED)=false)
{
parameters.setFocusMode(parameters.FOCUS\u MODE\u FIXED);
}
else if(focusModes.contains(Parameters.FOCUS_MODE_INFINITY)&&newFocusMode.compareTignoreCase(Parameters.FOCUS_MODE_INFINITY)=false)
{
parameters.setFocusMode(parameters.FOCUS_MODE_INFINITY);
}
else if(focusModes.contains(Parameters.FOCUS\u MODE\u MACRO)&&newFocusMode.compareTignoreCase(Parameters.FOCUS\u MODE\u MACRO)==false)
{
parameters.setFocusMode(parameters.FOCUS\u MODE\u宏);
}
else if(focusModes.contains(Parameters.FOCUS\u MODE\u AUTO)和&newFocusMode.compareTignoreCase(Parameters.FOCUS\u MODE\u AUTO)=false)
{
parameters.setFocusMode(parameters.FOCUS\u MODE\u AUTO);
}
设置参数(参数);
//现在应用所需的聚焦模式
parameters=camera.getParameters();
参数setFocusMode(newFocusMode);
设置参数(参数);
}