首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >如何在(JavaCameraView) CameraBridgeViewBase中设置自定义亮度调整?

如何在(JavaCameraView) CameraBridgeViewBase中设置自定义亮度调整?
EN

Stack Overflow用户
提问于 2019-11-08 18:39:22
回答 1查看 109关注 0票数 0

我想在使用OpenCV摄像头的应用程序中实现亮度调整。我已经找到了一些方法,并且我已经在JavaCameraViewCameraViewBridge Base的文档中找到了一些可以直接做到这一点的方法,但我还没有找到。

有没有办法做到这一点?

EN

回答 1

Stack Overflow用户

发布于 2019-11-08 19:11:43

按照这些帮助您调整相机曝光的步骤,首先创建一个CustomCameraView java类

代码语言:javascript
复制
public class CustomCameraView extends JavaCameraView implements Camera.PictureCallback {
private String mPictureFileName;

public CustomCameraView(Context context, AttributeSet attrs) {
    super(context, attrs);
}

public List<String> getEffectList() {
    return mCamera.getParameters().getSupportedFlashModes();
}

public boolean isEffectSupported() {
    return (mCamera.getParameters().getFlashMode() != null);
}

public String getEffect() {
    return mCamera.getParameters().getFlashMode();
}

public void setEffect(String effect) {
    mCamera.getParameters();
    Camera.Parameters params = mCamera.getParameters();
    params.setFlashMode(effect);
    mCamera.setParameters(params);
}

// set Camera Exposure value from input progress (0.0f - 1.0f)
public void setExposure(float progress) {
    if (progress < 0.0f && progress > 1.0f) return;
    Camera.Parameters params = mCamera.getParameters();
    int min = params.getMinExposureCompensation();
    int max = params.getMaxExposureCompensation();
    float realProgress = progress - 0.5f;
    int value;
    if (realProgress < 0) {
        value = -(int) (realProgress * 2 * min);
    } else {
        value = (int) (realProgress * 2 * max);
    }
    // if changed
    if (value != params.getExposureCompensation()) {
        params.setExposureCompensation(value);
        mCamera.setParameters(params);
    }
}

public void setPreviewFPS(double min, double max) {
    Camera.Parameters params = mCamera.getParameters();
    params.setPreviewFpsRange((int) (min * 1000), (int) (max * 1000));
    mCamera.setParameters(params);
}

public List<Camera.Size> getResolutionList() {
    return mCamera.getParameters().getSupportedPreviewSizes();
}

public void setResolution(int w, int h) {
    disconnectCamera();
    mMaxHeight = h;
    mMaxWidth = w;
    connectCamera(getWidth(), getHeight());
}

public Camera.Size getResolution() {
    return mCamera.getParameters().getPreviewSize();
}

public void takePicture(final String fileName) {
    this.mPictureFileName = fileName;
    // Postview and jpeg are sent in the same buffers if the queue is not empty when performing a capture.
    // Clear up buffers to avoid mCamera.takePicture to be stuck because of a memory issue
    mCamera.setPreviewCallback(null);

    // PictureCallback is implemented by the current class
    mCamera.takePicture(null, null, this);
}

@Override
public void onPictureTaken(byte[] data, Camera camera) {
    // The camera preview was automatically stopped. Start it again.
    mCamera.startPreview();
    mCamera.setPreviewCallback(this);

    // Write the image in a file (in jpeg format)
    try {
        FileOutputStream fos = new FileOutputStream(mPictureFileName);
        fos.write(data);
        fos.close();
    } catch (java.io.IOException e) {
        Log.e("PictureDemo", "Exception in photoCallback", e);
    }

}

public void cameraRelease() {
    if (mCamera != null) {
        mCamera.release();
    }
}
}

在此之后,在您声明JavaCameraView的活动的布局文件中,将其更改为

代码语言:javascript
复制
<your.package.CustomCameraView
    android:id="@+id/cameraViewer"
    android:layout_width="380dp"
    android:layout_height="450dp"
    android:layout_marginStart="8dp"
    android:layout_marginTop="8dp"
    android:layout_marginEnd="8dp"
    android:layout_marginBottom="8dp"
    android:visibility="gone"
    opencv:show_fps="false" />

注意:使用适当的包名更改your.package

最后,在活动中添加以下内容

代码语言:javascript
复制
cameraBridgeViewBase = (CustomCameraView) findViewById(R.id.cameraViewer);
cameraBridgeViewBase.setExposure(1.0f);

注:将此值1.0f更改为所需的值。

我希望这对你有帮助。

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/58764964

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档