如何使用相机设置捕获的图像以适合固定高度和宽度的 Imageview

Posted

技术标签:

【中文标题】如何使用相机设置捕获的图像以适合固定高度和宽度的 Imageview【英文标题】:How to set the captured images using camera to fit into a Imageview of fixed height and width 【发布时间】:2014-11-21 07:21:05 【问题描述】:

您好,我关注了 android 开发者网站并尝试以编程方式实现从相机捕获图像。我能够捕获图像并将其设置在 ImageView 中。 但是当我将图像设置到 ImageView 中时,我得到的图像宽度和高度较小。相反,我希望从画廊或相机捕获的图像应该适合 ImageView 元素布局。

MyXML 文件如下:

 <ImageView
            android:id="@+id/cmp_camera"
            android:layout_
            android:layout_
            android:layout_weight="1"
            android:layout_below="@+id/cmp_title"
            android:onClick="openCameraDialog"
            />

由于我将宽度指定为全屏 match_parent,因此宽度变小了。 我的要求是它应该适合 ImageView 布局。 对于相机编码,我遵循了这个网址: http://developer.android.com/training/camera/photobasics.html

【问题讨论】:

使用scaleType="fitXY" image1.setScaleType(ScaleType.FIT_XY); Camera display / preview in full screen does not maintain aspect ratio - image is skewed, stretched in order to fit on the screen的可能重复 【参考方案1】:

试试这个,

 android:scaleType="fitXY"

到您的 xml 文件中的 imageview。

【讨论】:

【参考方案2】:

也许你可以试试imgview.setScaleType(ScaleType.FIT_XY);

在 XML 中,使用以下语法:android:scaleType="fitXY"

图像使用Matrix.ScaleToFit FILL 进行缩放,执行以下操作:

独立缩放 X 和 Y,以便 src 与 dst 完全匹配。这可能会改变 src 的纵横比。

见Android Documentation。

【讨论】:

【参考方案3】:
ImageView.setImageBitmap(bitmap);


<ImageView
        android:id="@+id/cmp_camera"
        android:layout_
        android:layout_
        android:layout_weight="1"
        android:layout_below="@+id/cmp_title"
        android:onClick="openCameraDialog"
        android:scaleType="fitXY"
        />

【讨论】:

【参考方案4】:

使用此方法来适应您的图像并获得圆角

public static Bitmap getRoundedCornerBitmap(Bitmap bitmap) 
    Bitmap output = Bitmap.createBitmap(bitmap.getWidth(),
            bitmap.getHeight(), Config.ARGB_8888);
    Canvas canvas = new Canvas(output);

    final int color = 0xff424242;
    final Paint paint = new Paint();
    final Rect rect = new Rect(0, 0, bitmap.getWidth(), bitmap.getHeight());
    final RectF rectF = new RectF(rect);
    final float roundPx = 19;

    paint.setAntiAlias(true);
    canvas.drawARGB(0, 0, 0, 0);
    paint.setColor(color);
    canvas.drawRoundRect(rectF, roundPx, roundPx, paint);

    paint.setXfermode(new PorterDuffXfermode(Mode.SRC_IN));
    canvas.drawBitmap(bitmap, rect, rect, paint);

    return output;

并将图像设置为 ImageView

 addimg.setImageBitmap(getRoundedCornerBitmap(docode("Give path of your image here")));

将图片保存在sd卡或手机内存中,使用路径解码。

 public static Bitmap decodeFile(File f) 
    try 
        BitmapFactory.Options o = new BitmapFactory.Options();
        o.inJustDecodeBounds = true;
        BitmapFactory.decodeStream(new FileInputStream(f), null, o);

        // Find the correct scale value. It should be the power of 2.
        final int REQUIRED_SIZE = 70;
        int width_tmp = o.outWidth, height_tmp = o.outHeight;
        int scale = 1;
        while (true) 
            if (width_tmp / 2 < REQUIRED_SIZE
                    || height_tmp / 2 < REQUIRED_SIZE)
                break;
            width_tmp /= 2;
            height_tmp /= 2;
            scale++;
        

        BitmapFactory.Options o2 = new BitmapFactory.Options();
        o2.inSampleSize = scale;
        return BitmapFactory.decodeStream(new FileInputStream(f), null, o2);
     catch (FileNotFoundException e) 
        Log.e("decodeFile", "" + e);
    

    return null;

【讨论】:

以上是关于如何使用相机设置捕获的图像以适合固定高度和宽度的 Imageview的主要内容,如果未能解决你的问题,请参考以下文章

如何正确裁剪图像以适合 imageview

如何在 Flutter 中拉伸图像以适合整个背景(100% 高度 x 100% 宽度)?

如何在保持宽高比的同时将图像调整为固定的宽度和高度?

设置缩小的相机预览以相对于宽度具有正确的图像纵横比

如何在android中使用相机捕获自定义图像大小?

如何实现具有固定宽度和动态高度的 Next.js Image 组件以保持图像的尺寸?