Android开发技巧——大图裁剪

本文详细介绍了在Android开发中处理大图裁剪的技巧,包括裁剪控件的简单使用,大图裁剪的步骤,如读取图片旋转角度、采样缩放、裁剪操作,并特别讨论了如何处理图片旋转和防止OOM问题。通过实例代码展示了如何实现裁剪功能,并提供了大图裁剪的完整代码示例和资源下载链接。
摘要由CSDN通过智能技术生成

本篇内容是接上篇《Android开发技巧——定制仿微信图片裁剪控件》 的,先简单介绍对上篇所封装的裁剪控件的使用,再详细说明如何使用它进行大图裁剪,包括对旋转图片的裁剪。

裁剪控件的简单使用

XML代码

使用如普通控件一样,首先在布局文件里包含该控件:

 <com.githang.clipimage.ClipImageView
        xmlns:app="http://schemas.android.com/apk/res-auto"
        android:id="@+id/clip_image_view"
        android:layout_width="match_parent"
        android:layout_height="match_parent"
        android:layout_above="@+id/bottom"
        app:civClipPadding="@dimen/padding_common"
        app:civHeight="2"
        app:civMaskColor="@color/viewfinder_mask"
        app:civWidth="3"/>

支持的属性如下:

  • civHeight 高度比例,默认为1
  • civWidth 宽度比例,默认为1
  • civTipText 裁剪的提示文字
  • civTipTextSize 裁剪的提示文字的大小
  • civMaskColor 遮罩层颜色
  • civClipPadding 裁剪框边距

Java代码

如果裁剪的图片不大,可以直接设置,就像使用ImageView一样,通过如下四种方法设置图片:

mClipImageView.setImageURI(Uri.fromFile(new File(mInput)));
mClipImageView.setImageBitmap(bitmap);
mClipImageView.setImageResource(R.drawable.xxxx);
mClipImageView.setImageDrawable(drawable);

裁剪的时候调用mClipImageView.clip();就可以返回裁剪之后的Bitmap对象。

大图裁剪

这里会把大图裁剪及图片文件可能旋转的情况一起处理。
注意:由于裁剪图片最终还是需要把裁剪结果以Bitmap对象加载到内存中,所以裁剪之后的图片也是会有大小限制的,否则会有OOM的情况。所以,下面会设一个裁剪后的最大宽度的值。

读取图片旋转角度

在第一篇《 Android开发技巧——Camera拍照功能 》的时候,有提到过像三星的手机,竖屏拍出来的照片还是横的,但是有Exif信息记录了它的旋转方向。考虑到我们进行裁剪的时候,也会遇到类似这样的照片,所以对于这种照片需要旋转的情况,我选择了在裁剪的时候才进行处理。所以首先,我们需要读到图片的旋转角度:

    /**
     * 读取图片属性:旋转的角度
     *
     * @param path 图片绝对路径
     * @return degree旋转的角度
     */
    public static int readPictureDegree(String path) {
        int degree = 0;
        try {
            ExifInterface exifInterface = new ExifInterface(path);
            int orientation = exifInterface.getAttributeInt(ExifInterface.TAG_ORIENTATION, ExifInterface.ORIENTATION_NORMAL);
            switch (orientation) {
                case ExifInterface.ORIENTATION_ROTATE_90:
                    degree = 90;
                    break;
                case ExifInterface.ORIENTATION_ROTATE_180:
                    degree = 180;
                    break;
                case ExifInterface.ORIENTATION_ROTATE_270:
                    degree = 270;
                    break;
            }
        } catch (IOException e) {
            e.printStackTrace();
        }
        return degree;
    }
  • 4
    点赞
  • 37
    收藏
    觉得还不错? 一键收藏
  • 8
    评论
Android中,可以使用自定义视图和画布来实现图像裁剪。 首先,创建一个自定义的视图类,并在其中重写onDraw()方法。在onDraw()方法中,使用画布(Canvas)对象绘制需要裁剪的图像。然后,使用画布对象的clipRect()方法来指定需要裁剪的区域。最后,使用画布对象的drawBitmap()方法来绘制裁剪后的图像。 以下是一个简单的示例代码: ```java public class CustomImageView extends View { private Bitmap mBitmap; public CustomImageView(Context context, AttributeSet attrs) { super(context, attrs); mBitmap = BitmapFactory.decodeResource(getResources(), R.drawable.image); } @Override protected void onDraw(Canvas canvas) { super.onDraw(canvas); // 绘制原始图像 canvas.drawBitmap(mBitmap, 0, 0, null); // 裁剪区域 Rect rect = new Rect(100, 100, 300, 300); canvas.clipRect(rect); // 绘制裁剪后的图像 canvas.drawBitmap(mBitmap, 0, 0, null); } } ``` 在这个示例代码中,我们首先使用BitmapFactory类从资源文件中加载一个图像。然后,在onDraw()方法中,我们使用Canvas对象绘制该图像。接下来,我们创建一个矩形对象,指定需要裁剪的区域。然后,我们使用Canvas对象的clipRect()方法将裁剪区域设置为该矩形。最后,我们再次使用Canvas对象绘制图像,此时只会绘制裁剪区域内的部分。 当然,这只是一个简单的示例。你可以根据自己的需求和想象力来实现更复杂的图像裁剪效果。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 8
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值