0

我正在我的应用程序中使用 Surface 视图处理自定义相机,还使用屏幕捕获录制视频。

我希望在我的相机代码中实现缩放控制,但没有成功。

缩放时获取此日志:

E/Adreno200-ES20(12756): <qgl2DrvAPI_glBufferSubData:709>: GL_INVALID_OPERATION

我正在使用以下代码:

/** * setZoomControl * @param 参数 */

public void setZoomControl(Camera.Parameters params) {
    paramtrs = params;
    ZoomControls zoomControls = (ZoomControls) findViewById(R.id.zoomcontrols);

    if (params.isZoomSupported()) {
        final int maxZoomLevel = paramtrs.getMaxZoom();
        Log.i("max ZOOM ", "is " + maxZoomLevel);

        zoomControls.setIsZoomInEnabled(true);
        zoomControls.setIsZoomOutEnabled(true);

        zoomControls.setOnZoomInClickListener(new OnClickListener() {
            public void onClick(View v) {
                int currentZoomLevel = 0;
                if (currentZoomLevel < maxZoomLevel) {
                    currentZoomLevel++;
                    camera.startSmoothZoom(currentZoomLevel);
                }
            }
        });

        zoomControls.setOnZoomOutClickListener(new OnClickListener() {
            public void onClick(View v) {
                int currentZoomLevel = 0;
                if (currentZoomLevel > 0) {
                    currentZoomLevel--;
                    camera.startSmoothZoom(currentZoomLevel);
                }
            }
        });
    } else
        zoomControls.setVisibility(View.GONE);
}

请建议我在我的代码中发生了什么。

4

1 回答 1

4

您可以使用此代码

if (params.isZoomSupported()) {
        final int maxZoomLevel = params.getMaxZoom();
        Log.i("max ZOOM ", "is " + maxZoomLevel);
        zoomControls.setIsZoomInEnabled(true);
        zoomControls.setIsZoomOutEnabled(true);

        zoomControls.setOnZoomInClickListener(new OnClickListener(){
            public void onClick(View v){
                if(currentZoomLevel < maxZoomLevel){
                    currentZoomLevel++;
                    //mCamera.startSmoothZoom(currentZoomLevel);
                    params.setZoom(currentZoomLevel);
                    mCamera.setParameters(params);
                }
            }
        });

        zoomControls.setOnZoomOutClickListener(new OnClickListener(){
            public void onClick(View v){
                if(currentZoomLevel > 0){
                    currentZoomLevel--;
                    params.setZoom(currentZoomLevel);
                    mCamera.setParameters(params);
                }
            }
        });    
    }
    else
        zoomControls.setVisibility(View.GONE);
于 2013-10-08T13:22:14.827 回答