Android摄像头的图像质量非常低

Android摄像头的图像质量非常低,android,android-camera,Android,Android Camera,我正试图从相机上拍摄图像,但图像质量非常差。我不知道为什么,因为我是一个为android编程的新手 我试过几次,但都没有成功。这是我的密码。请帮助我在哪里更改代码 public class MainActivity extends Activity implements TextureView.SurfaceTextureListener { private Camera mCamera; private TextureView mTextureView1; @Ove

我正试图从相机上拍摄图像,但图像质量非常差。我不知道为什么,因为我是一个为android编程的新手

我试过几次,但都没有成功。这是我的密码。请帮助我在哪里更改代码

public class MainActivity extends Activity implements TextureView.SurfaceTextureListener {

    private Camera mCamera;
    private TextureView mTextureView1;

    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main);

        mTextureView1 = (TextureView) findViewById(R.id.textureView1);

        mTextureView1.setSurfaceTextureListener(this);

    }

    @Override
    public void onSurfaceTextureAvailable(SurfaceTexture surface, int width, int height) {
        try {
            mCamera = Camera.open(getCameraId());
            mCamera.setPreviewTexture(surface);
             Camera.Parameters params=mCamera.getParameters();

        List<Camera.Size> sizes = params.getSupportedPictureSizes();
        Camera.Size size = sizes.get(0);
        for(int i=0;i<sizes.size();i++)
        {
            if(sizes.get(i).width > size.width)
                size = sizes.get(i);
        }
        params.setPictureSize(size.width, size.height);

        params.setFlashMode(Camera.Parameters.FLASH_MODE_AUTO);
     params.setFocusMode(Camera.Parameters.FOCUS_MODE_CONTINUOUS_PICTURE);
        params.setSceneMode(Camera.Parameters.SCENE_MODE_AUTO);
        params.setWhiteBalance(Camera.Parameters.WHITE_BALANCE_AUTO);
        params.setExposureCompensation(0);
        params.setPictureFormat(ImageFormat.JPEG);
        params.setJpegQuality(100);
        params.setRotation(90);

        params.setJpegQuality(100);
        params.setPreviewSize(size.width, size.height);
            Camera.CameraInfo cameraInfo = new Camera.CameraInfo();
            Camera.getCameraInfo(getCameraId(), cameraInfo);
            setCameraDisplayOrientation(this, getCameraId(), mCamera);
            mCamera.startPreview();

        } catch (Exception e) {
            e.printStackTrace();
        }

    }

    public static void setCameraDisplayOrientation(Activity activity,
                                                   int cameraId, android.hardware.Camera camera) {
        android.hardware.Camera.CameraInfo info =
                new android.hardware.Camera.CameraInfo();
        android.hardware.Camera.getCameraInfo(cameraId, info);
        int rotation = activity.getWindowManager().getDefaultDisplay()
                .getRotation();
        int degrees = 0;
        switch (rotation) {
            case Surface.ROTATION_0: degrees = 0; break;
            case Surface.ROTATION_90: degrees = 90; break;
            case Surface.ROTATION_180: degrees = 180; break;
            case Surface.ROTATION_270: degrees = 270; break;
        }

        int result;
        if (info.facing == Camera.CameraInfo.CAMERA_FACING_FRONT) {
            result = (info.orientation + degrees) % 360;
            result = (360 - result) % 360;  // compensate the mirror
        } else {  // back-facing
            result = (info.orientation - degrees + 360) % 360;
        }
        camera.setDisplayOrientation(result);
    }


    private int getCameraId() {
        int cameraId = -1;
        // Search for the front facing camera
        int numberOfCameras = Camera.getNumberOfCameras();
        for (int i = 0; i < numberOfCameras; i++) {
            Camera.CameraInfo info = new Camera.CameraInfo();
            Camera.getCameraInfo(i, info);
            if (info.facing == Camera.CameraInfo.CAMERA_FACING_BACK) {
               // Log.d(DEBUG_TAG, "Camera found");
                cameraId = i;
                break;
            }
        }
        return cameraId;
    }

    @Override
    public void onSurfaceTextureSizeChanged(SurfaceTexture surface, int width, int height) {

    }

    @Override
    public boolean onSurfaceTextureDestroyed(SurfaceTexture surface) {
        try {
            mCamera.stopPreview();
            mCamera.release();
        } catch (Exception e) {
            e.printStackTrace();
        }
        return true;
    }

    @Override
    public void onSurfaceTextureUpdated(SurfaceTexture surface) {

    }


    Camera.PictureCallback mPicture = new Camera.PictureCallback(){
        @Override
        public void onPictureTaken(byte[] data, Camera camera) {
            File pictureFile = getOutputMediaFile(MediaStore.Files.FileColumns.MEDIA_TYPE_IMAGE);
            if (pictureFile == null) {
                return;
            }
            try {
                FileOutputStream fos = new FileOutputStream(pictureFile);
                fos.write(data);
                fos.close();
            } catch (FileNotFoundException e) {

            } catch (IOException e) {
            }
        }
    };

    private static File getOutputMediaFile(int mediaTypeImage) {
        File mediaStorageDir = new File(Environment.getExternalStoragePublicDirectory(Environment.DIRECTORY_PICTURES), "MyCameraApp");
        if (!mediaStorageDir.exists()) {
            if (!mediaStorageDir.mkdirs()) {
                Log.d("MyCameraApp", "failed to create directory");
                return null;
            }
        }
        // Create a media file name
        String timeStamp = new SimpleDateFormat("yyyyMMdd_HHmmss")
                .format(new Date());
        File mediaFile;
        mediaFile = new File(mediaStorageDir.getPath() + File.separator
                + "IMG_" + timeStamp + ".jpg");

        return mediaFile;
    }

    public void onClick(View v){
        mCamera.takePicture(null, null, mPicture);
    }
}
public类MainActivity扩展活动实现TextureView.SurfaceTextureListener{
私人摄像机麦卡梅拉;
私有TextureView mTextureView1;
@凌驾
创建时受保护的void(Bundle savedInstanceState){
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
mTextureView1=(TextureView)findViewById(R.id.TextureView W1);
mTextureView1.setSurfaceTextureListener(此);
}
@凌驾
SurfaceTextureAvailable上的公共空心(SurfaceTexture曲面、整型宽度、整型高度){
试一试{
mCamera=Camera.open(getCameraId());
mCamera.setPreviewTexture(表面);
Camera.Parameters params=mCamera.getParameters();
列表大小=params.getSupportedPictureSizes();
Camera.Size=Size.get(0);
用于(int i=0;i size.width)
大小=大小。获取(i);
}
参数setPictureSize(大小、宽度、大小、高度);
参数设置闪光模式(相机参数闪光模式自动);
参数设置聚焦模式(相机参数聚焦模式连续图像);
参数设置场景模式(摄像机参数场景模式自动);
参数设置白平衡(摄像机参数白平衡自动);
参数setExposureCompensation(0);
参数setPictureFormat(ImageFormat.JPEG);
参数设置质量(100);
参数设置旋转(90);
参数设置质量(100);
参数setPreviewSize(size.width、size.height);
Camera.CameraInfo CameraInfo=新的Camera.CameraInfo();
getCameraInfo(getCameraId(),cameraInfo);
setCameraRadisPlayOrientation(this,getCameraId(),mCamera);
mCamera.startPreview();
}捕获(例外e){
e、 printStackTrace();
}
}
公共静态无效设置和播放方向(活动,
int cameraId,android.hardware.Camera){
android.hardware.Camera.CameraInfo=
新的android.hardware.Camera.CameraInfo();
android.hardware.Camera.getCameraInfo(cameraId,info);
int rotation=activity.getWindowManager().getDefaultDisplay()
.getRotation();
整数度=0;
开关(旋转){
外壳表面旋转0:度=0;断裂;
外壳表面旋转90度:角度=90度;断裂;
外壳表面旋转180度:180度;断裂;
外壳表面旋转度:270度;断裂;
}
int结果;
if(info.faceting==Camera.CameraInfo.Camera\u faceting\u FRONT){
结果=(信息方向+角度)%360;
结果=(360-结果)%360;//补偿镜像
}else{//背面
结果=(信息方向-度+360)%360;
}
摄像头。设置显示方向(结果);
}
私有int getCameraId(){
int cameraId=-1;
//搜索前向摄像头
int numberOfCameras=Camera.getNumberOfCameras();
对于(int i=0;i


这比我手机中的1300万像素照相/摄像机要低得多。

可能是重复的否,答案没有帮助,已经试过了。这可能不直接适用于你的相机,但当我制作摄像机时,我将MediaRecorder对象的配置文件设置为
MediaRecorder.setProfile(CamcorderProfile.get(