android图片裁剪截取中间正方形部分

在做相册应用的过程中,需要得到一个压缩过的缩略图但,同时我还希望得到的bitmap能够是正方形的,以适应正方形的imageView,传统设置inSampleSize压缩比率的方式只是压缩了整张图片,如果一个图片的长宽差距较大,则展示出来的时候会有拉伸的现象,因此正确的做法是在压缩之后,对bitmap进行裁剪。

代码如下:

给定图片维持宽高比缩放后,截取正中间的正方形部分


1

2

3

4

5

6

7

8

9

10

11

12

13

14

15

16

17

18

19

20

21

22

23

24

25

26

27

28

29

30

31

32

33

34

35

36

37

38

39

40

41

42

43

44

45

46

47

/**

                                                                     

   * @param bitmap      原图

   * @param edgeLength  希望得到的正方形部分的边长

   * @return  缩放截取正中部分后的位图。

   */

  public static Bitmap centerSquareScaleBitmap(Bitmap bitmap, int edgeLength)

  {

   if(null == bitmap || edgeLength <= 0)

   {

    return  null;

   }

                                                                                

   Bitmap result = bitmap;

   int widthOrg = bitmap.getWidth();

   int heightOrg = bitmap.getHeight();

                                                                                

   if(widthOrg > edgeLength && heightOrg > edgeLength)

   {

    //压缩到一个最小长度是edgeLength的bitmap

    int longerEdge = (int)(edgeLength * Math.max(widthOrg, heightOrg) / Math.min(widthOrg, heightOrg));

    int scaledWidth = widthOrg > heightOrg ? longerEdge : edgeLength;

    int scaledHeight = widthOrg > heightOrg ? edgeLength : longerEdge;

    Bitmap scaledBitmap;

                                                                                 

          try{

           scaledBitmap = Bitmap.createScaledBitmap(bitmap, scaledWidth, scaledHeight, true);

          }

          catch(Exception e){

           return null;

          }

                                                                                      

       //从图中截取正中间的正方形部分。

       int xTopLeft = (scaledWidth - edgeLength) / 2;

       int yTopLeft = (scaledHeight - edgeLength) / 2;

                                                                                    

       try{

        result = Bitmap.createBitmap(scaledBitmap, xTopLeft, yTopLeft, edgeLength, edgeLength);

        scaledBitmap.recycle();

       }

       catch(Exception e){

        return null;

       }      

   }

                                                                                     

   return result;

  }

需要注的是bitmap参数一定要是从原图得到的,如果是已经经过BitmapFactory inSampleSize压缩过的,可能会不是到正方形。

时间: 2024-08-05 14:19:47

android图片裁剪截取中间正方形部分的相关文章

Android图片裁剪功能——调用系统裁剪

花了两天时间看了下android的图片裁剪功能的实现.其实刚开始做这个我挺虚的,以为整个功能都需要自己写出来,但查了些资料,发现android已经提供了裁剪功能,需要的话自己调用就成了.soga,这下轻松多了. 首先推荐几篇博客 Android大图片裁剪终极解决方案 要想弄明白裁剪功能,这系列博客非常重要,你可以不看我下面总结的,但你一定要看他这系列的几篇文章. Android 图片裁剪功能实现详解(类似QQ自定义头像裁剪) 这篇也不错,比较喜欢他的注释.虽然也有些误导,比如说他有一段对setD

Android图片裁剪实现(EnjoyCrop)

Android裁剪功能实现 概述 从4月初到5月份 ,差不多一个多月,终于把裁剪图片的功能码出来了,期间,解决了一个又来一个问题,好吧,问题总是会有的. 这里大致介绍这个裁剪功能技术点.主要难点,实现原理. 技术点 图片缩放.移动 裁剪区域预览 裁剪(包括越图片边界裁剪) 边界限制 主要难点 裁剪区域预览 裁剪 边界限制 实现原理 裁剪预览区域的实现 在我做过的项目中,就有使用过一些网络上开源的裁剪功能:半透明遮罩层的矩形预览框功能.它的实现原理是在裁剪预览区域外的地方填充了几个半透明的矩形框,

Android图片裁剪之自由裁剪

我的博客http://blog.csdn.net/dawn_moon 客户的需求都是非常怪的.我有时候在给客户做项目的时候就想骂客户是sb.可是请你相信我,等你有需求,自己变成客户的时候,给你做项目的哥哥肯定也会骂你是sb. 是这种,客户须要做一个图片上传的功能,这个图片须要裁剪.一般而言,这东西用系统自带的裁剪就搞定了.但是客户不,他要能够自由裁剪,就是长宽比不固定,想裁成什么比例就裁成什么比例,我一听,蛋都碎了. 没有办法,客户sb归sb,需求还是得照做,不然不给钱要喝西北风了. 图片裁剪的

Android图片裁剪——自定义裁剪工具

上次弄完调用系统裁剪之后,我又试着做一个自定义的裁剪工具. 老习惯,文章开始前还是先把我参考的资料贴出来.您愿意节省点时间看别人的更好的就直接从下面链接跳走-愿意看看我怎么做的那就先谢谢了! GitHub上老外做的一个非常棒的demo,代码也很漂亮 android自定义view实现裁剪图片功能,不使用系统的 第一个链接代码写的太好了,不过很多我用不上,也不需要那么麻烦的文件结构:第二个代码比较简单,但有些地方还是有借鉴意义的. 下面是我的代码,时间紧,就先不写太详细了: 注意几点: 我是在平板上

Android图片裁剪解决方案 -- 从相册截图

在Android开发中,可以轻松调用一个Intent完成从相册中截图的工作: Intent intent = new Intent(Intent.ACTION_GET_CONTENT, null); intent.setType("image/*"); intent.putExtra("crop", "true"); 附加选项如下: 选项 数据类型 描述 crop String 发送裁剪信号 aspectX int X方向上的比例 aspectY

Android 图片裁剪

参考文章: http://www.linuxidc.com/Linux/2012-11/73939p2.htm http://www.linuxidc.com/Linux/2012-11/73940p3.htm http://blog.csdn.net/yzwlord/article/details/8274131 http://blog.csdn.net/floodingfire/article/details/8144617

Android开发技巧——定制仿微信图片裁剪控件

拍照--裁剪,或者是选择图片--裁剪,是我们设置头像或上传图片时经常需要的一组操作.上篇讲了Camera的使用,这篇讲一下我对图片裁剪的实现. 背景 下面的需求都来自产品. 裁剪图片要像微信那样,拖动和放大的是图片,裁剪框不动. 裁剪框外的内容要有半透明黑色遮罩. 裁剪框下面要显示一行提示文字(这点我至今还是持保留意见的). 在Android中,裁剪图片的控件库还是挺多的,特别是github上比较流行的几个,都已经进化到比较稳定的阶段,但比较遗憾的是它们的裁剪过程是拖动或缩放裁剪框,于是只好自己

腾讯大牛动态教学:Android 仿微信 QQ 图片裁剪,赶紧收藏起来!

前言 在平时开发中,经常需要实现这样的功能,拍照 - 裁剪,相册 - 裁剪.当然,系统也有裁剪的功能,但是由于机型,系统兼容性等问题,在实际开发当中,我们通常会自己进行实现.今天,就让我们一起来看看怎样实现. 这篇博客实现的功能主要有仿微信,QQ 上传图像裁剪功能,包括拍照,从相册选取.裁剪框的样式有圆形,正方形,九宫格. 主要讲解的功能点 使用说明 整体的实现思路 裁剪框的实现 图片缩放的实现,包括放大,缩小,移动,裁剪等 我们先来看看我们实现的效果图 使用说明 有两种调用方式 第一种 第一种

Android大图片裁剪终极解决方案 原理分析

约几个月前,我正为公司的APP在Android手机上实现拍照截图而烦恼不已. 上网搜索,确实有不少的例子,大多都是抄来抄去,而且水平多半处于demo的样子,可以用来讲解知识点,但是一碰到实际项目,就漏洞百出. 当时我用大众化的解决方案,暂时性的做了一个拍照截图的功能,似乎看起来很不错.问题随之而来,我用的是小米手机,在别的手机上都运行正常,小米这里却总是碰钉子.虽然我是个理性的米粉,但是也暗地里把小米的工程师问候了个遍.真是惭愧! 翻文档也找不出个答案来,我一直对com.android.came