Camera api 使用相机调整亮度、对比度。参数

Camera api 使用相机调整亮度、对比度。参数,camera-api,Camera Api,我正在尝试制作一个相机应用程序,我找不到一种方法来改变相机的亮度,对比度使用相机。参数 所以我的问题是如何添加亮度和对比度功能来增加/减少亮度/对比度。例如,如果我增加seekbarit,则增加亮度。如果我降低seekbar,它会降低亮度。 请编辑我的代码或把你的答案给我 package com.example.beautymaker; import android.content.Context; import android.graphics.Bitmap; import android

我正在尝试制作一个相机应用程序,我找不到一种方法来改变相机的亮度,对比度使用相机。参数 所以我的问题是如何添加亮度和对比度功能来增加/减少亮度/对比度。例如,如果我增加seekbarit,则增加亮度。如果我降低seekbar,它会降低亮度。 请编辑我的代码或把你的答案给我

package com.example.beautymaker;

import android.content.Context;

import android.graphics.Bitmap;
import android.graphics.Color;
import android.hardware.Camera;
import android.hardware.camera2.CameraCharacteristics;
import android.util.Log;
import android.view.SurfaceHolder;
import android.view.SurfaceView;

import com.zomato.photofilters.imageprocessors.Filter;
import com.zomato.photofilters.imageprocessors.subfilters.BrightnessSubFilter;

import java.io.IOException;
import java.util.List;

public class CameraPreview extends SurfaceView implements SurfaceHolder.Callback {
    private SurfaceHolder mHolder;
    private Camera mCamera;

    public CameraPreview(Context context, Camera camera) {
        super(context);
        mCamera = camera;
        mHolder = getHolder();
        mHolder.addCallback(this);
        /*Camera.Parameters params = camera.getParameters();
        final int[] previewFpsRange = new int[2];
        params.getPreviewFpsRange(previewFpsRange);
        if (previewFpsRange[0] == previewFpsRange[1]) {
            final List<int[]> supportedFpsRanges = params.getSupportedPreviewFpsRange();
            for (int[] range : supportedFpsRanges) {
                if (range[0] != range[1]) {
                    params.setPreviewFpsRange(range[0], range[1]);
                    break;
                }
            }
        }*/



        // deprecated setting, but required on Android versions prior to 3.0
        mHolder.setType(SurfaceHolder.SURFACE_TYPE_PUSH_BUFFERS);

    }

    public void surfaceCreated(SurfaceHolder holder) {
        try {
            // create the surface and start camera preview
            if (mCamera == null) {
                mCamera.setPreviewDisplay(holder);
                mCamera.startPreview();


            }
        } catch (IOException e) {
            Log.d(VIEW_LOG_TAG, "Error setting camera preview: " + e.getMessage());
        }
    }

    public void refreshCamera(Camera camera) {
        if (mHolder.getSurface() == null) {
            // preview surface does not exist
            return;
        }
        // stop preview before making changes
        try {
            mCamera.stopPreview();
        } catch (Exception e) {
            // ignore: tried to stop a non-existent preview
        }
        // set preview size and make any resize, rotate or
        // reformatting changes here
        // start preview with new settings
        setCamera;
        try {
            mCamera.setPreviewDisplay(mHolder);
            mCamera.startPreview();
        } catch (Exception e) {
            Log.d(VIEW_LOG_TAG, "Error starting camera preview: " + e.getMessage());
        }
    }

    public void surfaceChanged(SurfaceHolder holder, int format, int w, int h) {
        // If your preview can change or rotate, take care of those events here.
        // Make sure to stop the preview before resizing or reformatting it.
        refreshCamera(mCamera);
    }

    public void setCamera(Camera camera) {
        //method to set a camera instance

        mCamera = camera;
        Camera.Parameters parameters = mCamera.getParameters();


//        parameters.setPreviewFpsRange(1500,3000);

        parameters.setExposureCompensation(parameters.getMaxExposureCompensation());

        if(parameters.isAutoExposureLockSupported())
        {
            parameters.setAutoExposureLock(false);
        }

//        parameters.setColorEffect(Camera.Parameters.WHITE_BALANCE_INCANDESCENT);
        parameters.getAutoExposureLock();
        parameters.set("iso",50);
//                parameters.setWhiteBalance();
        parameters.setAutoWhiteBalanceLock(true);
        parameters.setWhiteBalance(Camera.Parameters.WHITE_BALANCE_SHADE);



        /*Filter filter = new Filter();
        filter.addSubFilter(new BrightnessSubFilter(parameters));*/

        mCamera.setParameters(parameters);



    }

    @Override
    public void surfaceDestroyed(SurfaceHolder holder) {
        // TODO Auto-generated method stub
        // mCamera.release();

    }

    //for brightness
    public static Bitmap doBrightness(Bitmap src, int value) {
        // image size
        int width = src.getWidth();
        int height = src.getHeight();
        // create output bitmap
        Bitmap bmOut = Bitmap.createBitmap(width, height, src.getConfig());
        // color information
        int A, R, G, B;
        int pixel;

        // scan through all pixels
        for(int x = 0; x < width; ++x) {
            for(int y = 0; y < height; ++y) {
                // get pixel color
                pixel = src.getPixel(x, y);
                A = Color.alpha(pixel);
                R = Color.red(pixel);
                G = Color.green(pixel);
                B = Color.blue(pixel);

                // increase/decrease each channel
                R += value;
                if(R > 255) { R = 255; }
                else if(R < 0) { R = 0; }

                G += value;
                if(G > 255) { G = 255; }
                else if(G < 0) { G = 0; }

                B += value;
                if(B > 255) { B = 255; }
                else if(B < 0) { B = 0; }

                // apply new pixel color to output bitmap
                bmOut.setPixel(x, y, Color.argb(A, R, G, B));
            }
        }

        // return final image
        return bmOut;
    }
}
package com.example.beautymaker;
导入android.content.Context;
导入android.graphics.Bitmap;
导入android.graphics.Color;
导入android.hardware.Camera;
导入android.hardware.camera2.CameraCharacteristics;
导入android.util.Log;
导入android.view.SurfaceHolder;
导入android.view.SurfaceView;
导入com.zomato.photofilters.imageprocessors.Filter;
导入com.zomato.photofilters.imageprocessors.subfilters.BrightnessSubFilter;
导入java.io.IOException;
导入java.util.List;
公共类CameraPreview扩展了SurfaceView实现了SurfaceHolder.Callback{
私人地勤人员;
私人摄像机麦卡梅拉;
公共摄像机回顾(上下文、摄像机){
超级(上下文);
mCamera=摄像机;
mHolder=getHolder();
mHolder.addCallback(this);
/*Camera.Parameters params=Camera.getParameters();
最终整数[]预览wfpsrange=新整数[2];
参数getPreviewFpsRange(previewFpsRange);
如果(previewFpsRange[0]==previewFpsRange[1]){
最终列表supportedFpsRanges=params.getSupportedPreviewFpsRange();
对于(int[]范围:supportedFpsRanges){
如果(范围[0]!=范围[1]){
参数setPreviewFpsRange(范围[0],范围[1]);
打破
}
}
}*/
//不推荐使用的设置,但在3.0之前的Android版本上是必需的
mHolder.setType(SurfaceHolder.SURFACE\u TYPE\u PUSH\u缓冲区);
}
已创建的公共空白表面(表面持有人){
试一试{
//创建曲面并开始相机预览
if(mCamera==null){
mCamera.setPreviewDisplay(支架);
mCamera.startPreview();
}
}捕获(IOE异常){
Log.d(VIEW_Log_标记,“错误设置相机预览:”+e.getMessage());
}
}
公共摄像机(摄像机){
if(mHolder.getSurface()==null){
//预览曲面不存在
返回;
}
//在进行更改之前停止预览
试一试{
mCamera.stopPreview();
}捕获(例外e){
//忽略:尝试停止不存在的预览
}
//设置预览大小并进行任何调整大小、旋转或
//在此处重新格式化更改
//使用新设置开始预览
设置摄像机;
试一试{
mCamera.setPreviewDisplay(mHolder);
mCamera.startPreview();
}捕获(例外e){
d(VIEW_Log_标记,“启动相机预览时出错:”+e.getMessage());
}
}
公共无效表面更改(表面持有人,整数格式,整数w,整数h){
//如果预览可以更改或旋转,请在此处处理这些事件。
//请确保在调整预览大小或重新设置预览格式之前停止预览。
刷新照相机(mCamera);
}
公共摄像机(摄像机){
//方法来设置摄影机实例
mCamera=摄像机;
Camera.Parameters=mCamera.getParameters();
//参数。setPreviewFpsRange(15003000);
parameters.setExposureCompensation(parameters.getMaxExposureCompensation());
if(parameters.isAutoExposureLockSupported())
{
参数setAutoExposureLock(false);
}
//参数.setColorEffect(相机.参数.白平衡白炽灯);
参数。getAutoExposureLock();
参数设置(“iso”,50);
//参数setWhiteBalance();
参数setAutoWhiteBalanceLock(true);
参数.setWhiteBalance(摄像机.参数.白平衡色调);
/*过滤器=新过滤器();
filter.addSubFilter(新的BrightnessSubFilter(参数))*/
mCamera.setParameters(参数);
}
@凌驾
公共空间表面覆盖(表面覆盖物持有人){
//TODO自动生成的方法存根
//mCamera.release();
}
//为了亮度
公共静态位图右度(位图src,int值){
//图像大小
int width=src.getWidth();
int height=src.getHeight();
//创建输出位图
Bitmap bmOut=Bitmap.createBitmap(宽度、高度,src.getConfig());
//颜色信息
int A,R,G,B;
整数像素;
//扫描所有像素
对于(int x=0;x255){R=255;}
如果(R<0){R=0;}
G+=数值;
如果(G>255){G=255;}
如果(G<0){G=0;}
B+=数值;
如果(B>255){B=255;}
如果(B<0){B=0;}
//将新像素颜色应用于输出位图
设置像素(x,y,Color.argb(A,R,G,B));
}
}
//返回最终图像
返回bmOut;
}
}

摄像机中没有方法。参数
可以实现这一点。您必须阅读该类以检查可用参数,并且该类在
API21
和abov中已被弃用