在我的Android相机应用程序中捕获的图像模糊

时间:2015-10-08 07:59:16

标签: android image bitmap camera

我开发了自己的相机应用程序,具有一些功能,相机工作正常。 问题是捕获的图像在SD卡上模糊,图像质量和尺寸在不同的手机上变化,甚至相机像素都很好和相同。 我不知道在app中捕获和保存图像有什么问题。我遵循了开发者页面的指南和github的一些样本。

我无法找到问题的确切解决方案,但有些示例实现了位图,而且这些图片质量很好。我不知道位图

任何解决这个问题的想法都会对我的进一步发展有所帮助。

pictureCallBack的代码

Camera.AutoFocusCallback autoFocusCallback = new Camera.AutoFocusCallback() {
    @Override
    public void onAutoFocus(boolean success, Camera camera) {
        camera.takePicture(shutterCallback, rawPictureCallBack, null, jpegPictureCallback);
    }
};

保存图像的线程

FileOutputStream outStream = null;
        /**
         * Write to SD Card
         */
        try {
            File sdCard = Environment.getExternalStorageDirectory();
            File dir = new File(sdCard.getAbsolutePath() + "/MyCamera");
            dir.mkdirs();

            String fileName = String.format("%d.png", System.currentTimeMillis());
            File outFile = new File(dir, fileName);

            outStream = new FileOutputStream(outFile);
            outStream.write(data[0]);
            outStream.flush();
            outStream.close();
            runOnUiThread(new Runnable() {
                @Override
                public void run() {
                    retrieveLastImage();
                    showCustomAlert();
                }
            });
            Log.d(DEBUG_TAG, "onPictureTaken - wrote bytes: " + data.length + " to " + outFile.getAbsolutePath());
            refreshGallery(outFile);
        } catch (FileNotFoundException e) {
            e.printStackTrace();
        } catch (IOException e) {
            e.printStackTrace();
        } finally {
        }

2 个答案:

答案 0 :(得分:1)

此代码看起来没问题,我只是想知道,您使用.png扩展程序保存文件:通常只有jpeg可用...

您致电setPictureSize()了吗?您需要调用它,因为默认大小未指定且可能太小 - 模糊。您还需要始终致电setPreviewSize()

选择正确的尺码很棘手。始终从getSupportedPictureSizes()getSupportedPreviewSizes()返回的尺寸中选择一个。预览大小必须与SurfaceView具有相同的宽高比,您可以在其中显示预览,或者预览将被拉伸。根据您的需要选择图片大小。

我在相机上遇到了很多麻烦。如果您完全遵循Google documentation,或者相机行为异常,您将做到最好。它可能在一台设备上运行,但在另一台设备上运行。例如,我尝试在活动的onCreate方法中设置大小,但这不起作用。

答案 1 :(得分:0)

要引用以下链接,为什么我们的相机编程会产生模糊图像。

https://developer.android.com/training/camera/photobasics

然后我们必须点击此链接以获得清晰的图像。

https://developer.android.com/guide/topics/media/camera#java

在这里

 Intent takePictureIntent = new Intent(MediaStore.ACTION_IMAGE_CAPTURE);
if (takePictureIntent.resolveActivity(getPackageManager()) != null) {
    startActivityForResult(takePictureIntent, REQUEST_IMAGE_CAPTURE);
}




@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);
 }
  • 此功能有助于获得THUMBNAIL图像而不是我们需要的完整图像。