我尝试使用移动视觉库从相机拍摄照片,但是拍摄的图像质量很低(分辨率为240x320)

我不知道应该在哪里修改此功能(我想它与CameraSource有关),我不确定是否应该修改。

这是我的捕获功能(可从此处找到:How Capture Picture while mobile vision api - face tracking

public void takePicture(){

        cameraSource.takePicture(null, new CameraSource.PictureCallback() {
            private File imageFile;

            @Override
            public void onPictureTaken(byte[] bytes) {
                try {
                    // convert byte array into bitmap
                    Bitmap loadedImage = null;
                    Bitmap rotatedBitmap = null;
                    loadedImage = BitmapFactory.decodeByteArray(bytes, 0,
                            bytes.length);

                    Matrix rotateMatrix = new Matrix();
                    rotateMatrix.postRotate(0);
                    rotatedBitmap = Bitmap.createBitmap(loadedImage, 0, 0,
                            loadedImage.getWidth(), loadedImage.getHeight(),
                            rotateMatrix, false);

                    File dir = new File(
                            Environment.getExternalStoragePublicDirectory(
                                    Environment.DIRECTORY_PICTURES), "MyPhotos");

                    boolean success = true;
                    if (!dir.exists())
                    {
                        success = dir.mkdirs();
                    }

                    if (success) {
                        java.util.Date date = new java.util.Date();

                        imageFile = new File(dir.getAbsolutePath()
                                + File.separator
                                + new Timestamp(date.getTime()).toString()
                                + "Image.jpg");

                        pictureName = imageFile.getName();
                        Log.i("Picture Name ", pictureName);
                        imageFile.createNewFile();

                        Toast.makeText(MainActivity.this, "Image Saved", Toast.LENGTH_SHORT).show();
                    } else {
                        Toast.makeText(getBaseContext(), "Image Not saved",
                                Toast.LENGTH_SHORT).show();
                        return;
                    }
                    ByteArrayOutputStream ostream = new ByteArrayOutputStream();

                    // save image into gallery
                    rotatedBitmap.compress(Bitmap.CompressFormat.JPEG, 100, ostream);

                    FileOutputStream fout = new FileOutputStream(imageFile);
                    fout.write(ostream.toByteArray());
                    fout.close();
                    ContentValues values = new ContentValues();

                    values.put(MediaStore.Images.Media.DATE_TAKEN,
                            System.currentTimeMillis());
                    values.put(MediaStore.Images.Media.MIME_TYPE, "image/jpeg");
                    values.put(MediaStore.MediaColumns.DATA,
                            imageFile.getAbsolutePath());

                    MainActivity.this.getContentResolver().insert(
                            MediaStore.Images.Media.EXTERNAL_CONTENT_URI, values);

                    //saveToInternalStorage(loadedImage);
                } catch (Exception e) {
                    e.printStackTrace();
                }
            }
        });
    }


这是CameraSource的创建:

        cameraSource = new CameraSource.Builder(getApplicationContext(), detector)
                .setFacing(CameraSource.CAMERA_FACING_BACK)
                .setRequestedPreviewSize(1280, 1024)
                .setRequestedFps(2.0f)
                .setAutoFocusEnabled(true)
                .build();


我应该在此处进行任何修改还是添加一些内容?

感谢帮助。

最佳答案

我通过更改以下两行来解决此问题:

 rotatedBitmap.compress(Bitmap.CompressFormat.JPEG, 100, ostream);


我将格式更改为PNG

rotatedBitmap.compress(Bitmap.CompressFormat.PNG, 100, ostream);


并在创建变量时更改了camerasource的这些属性

.setRequestedPreviewSize(1920, 1024)
 .setRequestedFps(3.0f)

08-18 07:48