当前位置: 首页 > 知识库问答 >
问题:

如何提高使用CameraManager拍摄的照片的质量

周威
2023-03-14

比较很简单:我用使用CameraManager的自定义相机拍照。然后,我用默认的Galaxy Note 5相机拍摄同一张照片。CameraManager可用的最大尺寸是1836年的3264,所以我使用它,并将三星相机的分辨率设置为相同的分辨率。结果

  • 注5:我可以在照片中看到细节
  • 相机经理:我看不到细节。图像质量很低。

然后我尝试将CameraManager照片设置为

 captureBuilder.set(CaptureRequest.JPEG_QUALITY, (byte) 100);

仍然没有变化。嗯,只有一个变化:使用CameraManager拍摄的照片的文件大小变为2.3MB(以前是0.5MB),而三星照片的大小(仍然是)1.6MB。因此,即使尺寸较大,使用CameraManager拍摄的照片质量仍然较低。如何解决此问题:如何使使用CameraManager拍摄的照片与使用Note 5附带的默认相机应用程序拍摄的照片具有相同的质量?

共有2个答案

狄旻
2023-03-14

我认为三星库存相机应用程序的质量更好,因为它使用三星相机SDK。这是相机2 API的扩展。

SDK提供了有用的附加功能(例如阶段自动聚焦)。尝试启用镜头光学稳定。

梁池暝
2023-03-14

这些是我们在使用Camer manager时使用的一些方法,此方法可能会对您有所帮助。

Android摄像头应用程序将发送给onActivityResult()的意图中的照片编码为extras中的一个小位图,位于“data”键下。以下代码检索此图像并将其显示在ImageView中。

  @Override
    protected void onActivityResult(int requestCode, int resultCode, Intent data) {
        if (requestCode == REQUEST_IMAGE_CAPTURE && resultCode == RESULT_OK) {
            Bundle extras = data.getExtras();
            Bitmap imageBitmap = (Bitmap) extras.get("data");
            mImageView.setImageBitmap(imageBitmap);
        }
    }
    private File createImageFile() throws IOException {
        // Create an image file name
        String timeStamp = new SimpleDateFormat("yyyyMMdd_HHmmss").format(new Date());
        String imageFileName = "JPEG_" + timeStamp + "_";
        File storageDir = getExternalFilesDir(Environment.DIRECTORY_PICTURES);
        File image = File.createTempFile(
            imageFileName,  /* prefix */
            ".jpg",         /* suffix */
            storageDir      /* directory */
        );

        // Save a file: path for use with ACTION_VIEW intents
        mCurrentPhotoPath = "file:" + image.getAbsolutePath();
        return image;
    }
private void setPic() {
    // Get the dimensions of the View
    int targetW = mImageView.getWidth();
    int targetH = mImageView.getHeight();

    // Get the dimensions of the bitmap
    BitmapFactory.Options bmOptions = new BitmapFactory.Options();
    bmOptions.inJustDecodeBounds = true;
    BitmapFactory.decodeFile(mCurrentPhotoPath, bmOptions);
    int photoW = bmOptions.outWidth;
    int photoH = bmOptions.outHeight;

    // Determine how much to scale down the image
    int scaleFactor = Math.min(photoW/targetW, photoH/targetH);

    // Decode the image file into a Bitmap sized to fill the View
    bmOptions.inJustDecodeBounds = false;
    bmOptions.inSampleSize = scaleFactor;
    bmOptions.inPurgeable = true;

    Bitmap bitmap = BitmapFactory.decodeFile(mCurrentPhotoPath, bmOptions);
    mImageView.setImageBitmap(bitmap);
}
 类似资料:
  • 可使用前端相机或背面相机拍摄照片。 A ) (显示模式) 轻触图标可切换为显示模式。 B ) (位置数据)/(切换相机)/(切换图像大小) 启用位置数据的使用设定即可显示(位置数据)。轻触图标可使用Wi-Fi、GPS*、手机基地台*的信息取得位置数据。取得后会显示(已取得位置数据),拍摄照片时会同时记录位置数据。 * 仅限3G/Wi-Fi机种 C ) (快门) 轻触图标可拍摄照片。 D ) 已拍摄

  • 我写了这段代码,用相机拍照,然后将其转换为jpeg文件并将其上传到Parse.com作为ParseFile。 问题是,图片非常小(153 x 204像素),质量非常低。 我需要图片是至少5 MP质量和裁剪到300x300像素。 这是我现在使用的代码。 提前感谢。

  • 标题问题99.9%的答案如下: 当您在

  • 问题内容: 我需要在活动中获得并显示照片库中最近拍摄的3张照片,而无需任何点击。 完成此步骤后,滚动时,我应该以3 x 3的方式拍摄其他照片。 您知道快速执行此操作的正确方法吗?谢谢。 问题答案: 这是使用适用于iOS 8+设备的框架的解决方案:

  • 问题内容: 我想在我的应用中以真实的黑白照片。我也在该网站上搜索了解决方案,但是我总是找到将照片放成灰度的解决方案(例如在本主题中),但这不是我想要的… 我还发现了一个提出这一建议的主题: 但是图像质量太差了… 请问有人有主意吗? 谢谢 问题答案: 如果您希望图像为1位黑白,则可以使用简单的(慢速)阈值算法 但是,根据看起来不太好的东西,要获得更好的结果,您需要使用抖动算法,请参阅算法概述 -这是

  • 我需要捕捉多张照片使用Camera2 API后,特定的间隔,如5秒。我需要在没有预演的情况下做。我可以捕获一张单张照片没有预览,但我需要知道如何捕获多张照片?一旦相机打开,我不想一次又一次地设置所有的参数,我只想在特定的间隔后捕捉照片,一旦所有的照片都捕捉到了,然后我会关闭相机。 也只是第一次被捕获的图像。第二次调用takepciture()方法时,什么也没有发生。 下面是我的代码。