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

Android:以低质量拍照[复制]

姜钊
2023-03-14

我创建了一个项目,允许用户拍照并查看。我在拍摄、查看、保存和检索照片时没有遇到任何问题。但我的问题是相机拍摄的图像质量不好,我不知道如何设置相机的质量Intent。这是我的代码。

....
Intent cameraIntent = new Intent(android.provider.MediaStore.ACTION_IMAGE_CAPTURE);
        startActivityForResult(cameraIntent, CAMERA_REQUEST);
....

 @Override
    protected void onActivityResult(int requestCode, int resultCode, Intent data) {
        super.onActivityResult(requestCode, resultCode, data);

        if (requestCode == CAMERA_REQUEST && resultCode == RESULT_OK) {
            Bitmap userPhoto = (Bitmap) data.getExtras().get("data");
            iv_user.setImageBitmap(userPhoto);
        }
    }

这是一张相机开启时的屏幕截图。

这是拍摄图像后的预览相机模式。

如果我们比较这两张照片,我们可以看到预览模式下的图像是模糊的。

共有2个答案

司空繁
2023-03-14

Android相机应用程序在传递给onActivityResult()的返回Intent中将照片编码为附加项中的一个小位图(我们称之为缩略图),位于键“data”下。

如果您想检索全尺寸图像,您的应用程序首先需要将图像存储到外部存储中,然后读取它。您可以在

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

奚和光
2023-03-14

我其实不知道为什么会这样,但在尝试了每种方法之后,这里的情况都是一样的,所以我建议你使用一个非常简单的库,比如下面,好的事情是你的图片质量保持不变。

简单地添加到您的gradle文件:

    implementation 'com.theartofdev.edmodo:android-image-cropper:2.7.+'

简单的调用start相机和选项();启动相机的方法

    startCameraAndOptions(); //call to starts you camera with other additional option like gallery.

    public void startCameraAndOptions(View view) {
            CropImage.activity()
                    .setGuidelines(CropImageView.Guidelines.ON)
                    .setActivityTitle("My Crop")
                    .setCropShape(CropImageView.CropShape.RECTANGLE)
                    .setCropMenuCropButtonTitle("Done")
    //                .setRequestedSize(400, 400)
                    .setAllowRotation(true)
                    .setOutputCompressQuality(100)
                    .setCropMenuCropButtonIcon(R.drawable.arrow)
                    .start(this);
        }

        @Override
        protected void onActivityResult(int requestCode, int resultCode, Intent data) {
            BitmapDrawable background;
            Bitmap bitmap;
            ImageView img_preview = (ImageView) findViewById(R.id.img_preview);

            // handle result of CropImageActivity
            if (requestCode == CropImage.CROP_IMAGE_ACTIVITY_REQUEST_CODE) {
                CropImage.ActivityResult result = CropImage.getActivityResult(data);
                if (resultCode == RESULT_OK) {
                    bitmap = null;
                    try {
                        bitmap = MediaStore.Images.Media.getBitmap(this.getContentResolver(), result.getUri());
                        background = new BitmapDrawable(bitmap);
                    } catch (IOException e) {
                        e.printStackTrace();
                    }

                    Picasso.get()
                            .load(result.getOriginalUri())
    //                        .resize(200, 200)
    //                        .centerCrop()
                            .into(img_preview);

                } else if (resultCode == CropImage.CROP_IMAGE_ACTIVITY_RESULT_ERROR_CODE) {
                    Toast.makeText(this, "Cropping failed: " + result.getError(), Toast.LENGTH_LONG).show();
                }
            }
        }

**/* LAYOUT SECTION */ optional (style it your own way)**

<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
    xmlns:app="http://schemas.android.com/apk/res-auto"
    xmlns:tools="http://schemas.android.com/tools"
    android:layout_width="match_parent"
    android:layout_height="match_parent"
    android:orientation="vertical"
    tools:context="com.hollaport.hollaport.Demo">

    <Button
        android:layout_marginTop="10dp"
        android:layout_gravity="center"
        android:id="@+id/trigger"
        android:layout_width="50dp"
        android:layout_height="50dp"
        android:background="@drawable/camera"/>

    <!--<com.theartofdev.edmodo.cropper.CropImageView-->
        <!--android:id="@+id/cropImageView"-->
        <!--android:layout_width="match_parent"-->
        <!--android:layout_height="0dp"-->
        <!--android:layout_weight="1"/>-->

    <android.support.v7.widget.CardView
        android:id="@+id/view2"
        android:layout_width="match_parent"
        android:layout_height="match_parent"
        android:layout_margin="5dp"
        android:layout_gravity="center"
        android:adjustViewBounds="true"
        android:innerRadius="0dp"
        android:shape="rectangle"
        android:thicknessRatio="2"
        app:cardCornerRadius="0dp">

        <ImageView
            android:id="@+id/img_preview"
            android:layout_width="fill_parent"
            android:layout_height="fill_parent"
            android:layout_gravity="center"
            android:adjustViewBounds="true"
            android:scaleType="fitXY"/>
    </android.support.v7.widget.CardView>
</LinearLayout>
 类似资料:
  • 本文向大家介绍Android 拍照,包括了Android 拍照的使用技巧和注意事项,需要的朋友参考一下 示例 向AndroidManifest文件添加访问摄像头的权限: Xml文件: 活动            

  • 我有一个问题。当我试图从相机上拍照时,质量很低。首先,使用摄像头捕捉图片,然后保存到目录中,同时获取图片并显示在我的应用程序中。保存在目录中的图片质量很好,但当我从目录中获取时,质量很低。下面是我的示例代码: 任何解决方案/建议?谢谢:) 解决了的 当我遵循下面Antrromet给出的代码时,问题解决了

  • 当我用Android相机拍照时,我得到的是低质量的位图图像。我想知道是否有可能使这张照片质量良好。 我谷歌了一些关于它的信息,我想我必须使用EXTRA_OUTPUT(http://developer.android.com/reference/android/provider/MediaStore.html#ACTION_IMAGE_CAPTURE) 我很挣扎,因为我不知道该把它放在哪里,也不知道

  • 问题内容: 拜托,有人可以帮我吗? 我有一个正在使用的项目,我想拍照并保存文件,但是没有实现函数。 问题答案: 结果:我实现了一个扩展JavaCameraView的新类,并为自己实现了功能takePicture。 --

  • 我正在用FileProvider在Android牛轧糖上拍照,这是我的代码 file_paths.xml: 编辑丢失的文件#createNewFile();

  • 问题内容: 我正在通过以下代码拍摄照片并将其保存到SD卡中,但是它产生的照片质量如此之低,即使100%的质量也是如此。也许bitmap.compress不是正确的方法(或根本不是位图?!) 这是我的代码: 问题答案: 请调用以下功能从相机捕获图像。 您可以在selectedImageUri变量中获取图像Uri。(图像存储在SD卡中)