图片处理时,有时需要为图片加一些边框,下面介绍一种为图片添加简单边框的方法。

基本思路是:将边框图片裁剪成八张小图片(图片大小最好一致,不然后面处理会很麻烦),分别对应左上角,左边,左下角,下边,右下角,右边,右上角,上边,其中左右上下只需要一个有效长度,就像重写水平进度条一样,只需要一个有效的长度,然后平铺,就达到了最后想要的效果,不错,左右上下边采用的也是这样的思路。也可以将八张图片组合在一起,然后读取整张图片,用代码裁剪,下面会给出相应的代码。下面的代码主要是给出第一种方法,后一种给出代码,有兴趣的可以自己试试。注意图片不要放到drawable目录下面,因为屏幕分辨率会影响图片的大小,所以最好是放在assets目录里面。下面代码为了简便所以没有那样做。后面一篇还会讲到另一种添加边框图片的方法。

下面贴图片:

原图片:

处理后:

代码(res参数为上面所说的八个边框组合图片资源):

/**  * 图片与边框组合  * @param bm 原图片  * @param res 边框资源  * @return  */ private Bitmap combinateFrame(Bitmap bm, int[] res) {  Bitmap bmp = decodeBitmap(res[0]);  // 边框的宽高  final int smallW = bmp.getWidth();  final int smallH = bmp.getHeight();    // 原图片的宽高  final int bigW = bm.getWidth();  final int bigH = bm.getHeight();    int wCount = (int) Math.ceil(bigW * 1.0 / smallW);  int hCount = (int) Math.ceil(bigH  * 1.0 / smallH);    // 组合后图片的宽高  int newW = (wCount + 2) * smallW;  int newH = (hCount + 2) * smallH;    // 重新定义大小  Bitmap newBitmap = Bitmap.createBitmap(newW, newH, Config.ARGB_8888);  Canvas canvas = new Canvas(newBitmap);  Paint p = new Paint();  p.setColor(Color.TRANSPARENT);  canvas.drawRect(new Rect(0, 0, newW, newH), p);    Rect rect = new Rect(smallW, smallH, newW - smallW, newH - smallH);  Paint paint = new Paint();  paint.setColor(Color.WHITE);  canvas.drawRect(rect, paint);    // 绘原图  canvas.drawBitmap(bm, (newW - bigW - 2 * smallW) / 2 + smallW, (newH - bigH - 2 * smallH) / 2 + smallH, null);  // 绘边框  // 绘四个角  int startW = newW - smallW;  int startH = newH - smallH;  Bitmap leftTopBm = decodeBitmap(res[0]); // 左上角  Bitmap leftBottomBm = decodeBitmap(res[2]); // 左下角  Bitmap rightBottomBm = decodeBitmap(res[4]); // 右下角  Bitmap rightTopBm = decodeBitmap(res[6]); // 右上角    canvas.drawBitmap(leftTopBm, 0, 0, null);  canvas.drawBitmap(leftBottomBm, 0, startH, null);  canvas.drawBitmap(rightBottomBm, startW, startH, null);  canvas.drawBitmap(rightTopBm, startW, 0, null);    leftTopBm.recycle();  leftTopBm = null;  leftBottomBm.recycle();  leftBottomBm = null;  rightBottomBm.recycle();  rightBottomBm = null;  rightTopBm.recycle();  rightTopBm = null;    // 绘左右边框  Bitmap leftBm = decodeBitmap(res[1]);  Bitmap rightBm = decodeBitmap(res[5]);  for (int i = 0, length = hCount; i < length; i++)  {   int h = smallH * (i + 1);   canvas.drawBitmap(leftBm, 0, h, null);   canvas.drawBitmap(rightBm, startW, h, null);  }    leftBm.recycle();  leftBm = null;  rightBm.recycle();  rightBm = null;    // 绘上下边框  Bitmap bottomBm = decodeBitmap(res[3]);  Bitmap topBm = decodeBitmap(res[7]);  for (int i = 0, length = wCount; i < length; i++)  {   int w = smallW * (i + 1);   canvas.drawBitmap(bottomBm, w, startH, null);   canvas.drawBitmap(topBm, w, 0, null);  }    bottomBm.recycle();  bottomBm = null;  topBm.recycle();  topBm = null;    canvas.save(Canvas.ALL_SAVE_FLAG);  canvas.restore();    return newBitmap; }

如果边框是在一张图片里面,下面给出从一张图片取中间200X200的区域。如何类似边框过多,可以将裁剪的信息写入到指定的文件,裁剪时可先将边框图片信息读取出来,然后再裁剪出边框。如果处理的原图片太大,可能会出内存溢出。可先将图片缩小到一定尺寸再处理,具体缩小方法,参见android图像处理系列之二--图片旋转、缩放、反转的图片缩放。如果边框是在一张图片里面,下面给出从一张图片取中间200X200的区域。如何类似边框过多,可以将裁剪的信息写入到指定的文件,裁剪时可先将边框图片信息读取出来,然后再裁剪出边框。如果处理的原图片太大,可能会出内存溢出。可先将图片缩小到一定尺寸再处理,具体缩小方法,参见android图像处理系列之二--图片旋转、缩放、反转的图片缩放。如果边框是在一张图片里面,下面给出从一张图片取中间200X200的区域。如何类似边框过多,可以将裁剪的信息写入到指定的文件,裁剪时可先将边框图片信息读取出来,然后再裁剪出边框。如果处理的原图片太大,可能会出内存溢出。可先将图片缩小到一定尺寸再处理,具体缩小方法,参见android图像处理系列之二--图片旋转、缩放、反转的图片缩放。

 /**  * 截取图片的中间的200X200的区域  * @param bm  * @return  */ private Bitmap cropCenter(Bitmap bm) {  int dstWidth = 200;        int dstHeight = 200;        int startWidth = (bm.getWidth() - dstWidth)/2;        int startHeight = ((bm.getHeight() - dstHeight) / 2);        Rect src = new Rect(startWidth, startHeight, startWidth + dstWidth, startHeight + dstHeight);        return dividePart(bm, src); }  /**  * 剪切图片  * @param bmp 被剪切的图片  * @param src 剪切的位置  * @return 剪切后的图片  */ private Bitmap dividePart(Bitmap bmp, Rect src) {  int width = src.width();  int height = src.height();  Rect des = new Rect(0, 0, width, height);  Bitmap croppedImage = Bitmap.createBitmap(width, height, Bitmap.Config.RGB_565);  Canvas canvas = new Canvas(croppedImage);  canvas.drawBitmap(bmp, src, des, null);  return croppedImage; }

处理后图片(原图片还是上面的图片):

Android 给图片加边框相关推荐

  1. android给图片加边框,android 图片加边框 ImageView border 成效

    android 图片加边框 ImageView border 效果 1.布局文件 res/layout/some_page.xml android:id="@+id/respImageBor ...

  2. android给图片加边框,Android学习笔记进阶19之给图片加边框

    //设置颜色 public void setColour(int color){ co = color; } //设置边框宽度 public void setBorderWidth(int width ...

  3. android 加载进度,Android实现图片加载进度提示

    本文实例为大家分享了Android实现图片加载进度提示的具体代码,供大家参考,具体内容如下 先上图: 实现原理: 第一个控件的实现原理是重写ImageView的onDraw()方法,利用Canvas的 ...

  4. Android Glide图片加载框架(四)回调与监听

    文章目录 Android Glide图片加载框架系列文章 Android Glide图片加载框架(一)基本用法 Android Glide图片加载框架(二)源码解析之with() Android Gl ...

  5. Android Glide图片加载框架(三)缓存机制

    文章目录 一.缓存简介 二.缓存用法 内存缓存方式 磁盘缓存方式 三.缓存KEY 四.内存缓存 内存缓存流程 五.磁盘缓存 磁盘缓存流程 Android Glide图片加载框架系列文章 Android ...

  6. Android Glide图片加载框架(二)源码解析之into()

    文章目录 一.前言 二.源码解析 1.into(ImageView) 2.GlideContext.buildImageViewTarget() 3.RequestBuilder.into(Targe ...

  7. Android Glide图片加载框架(二)源码解析之load()

    文章目录 一.前言 二.源码分析 1.load() Android Glide图片加载框架系列文章 Android Glide图片加载框架(一)基本用法 Android Glide图片加载框架(二)源 ...

  8. Android Glide图片加载框架(二)源码解析之with()

    文章目录 一.前言 二.如何阅读源码 三.源码解析 1.with() Android Glide图片加载框架系列文章 Android Glide图片加载框架(一)基本用法 Android Glide图 ...

  9. Android Glide图片加载框架(一)基本用法

    文章目录 一.前言 二.简介 三.基本用法 第一步:调用 Glide.with() 方法创建加载图片的实例 第二步:调用 load() 方法指定待加载的图片资源 第三步:调用 into() 方法绑定显 ...

  10. 如何给照片加边框?图片加边框的3个实用方法

    分享3个良心好用的照片加相框工具,个个都是操作简单,还提供了丰富好看的边框模板,瞬间让照片变得有质感,大家可以根据自己的需求选择对应的工具进行添加. 1.改图鸭 一个免费的图片处理网站,提供几十种图片 ...

最新文章

  1. Python-OpenCV设置摄像头分辨率
  2. 如何方便记忆和理解类图里的线条
  3. 基于JAVA+Servlet+JSP+MYSQL的交通罚单管理系统
  4. Disabling Shortcut Keys in Full Screen mode
  5. iOS App被拒原因以及解决方案总结。
  6. layer弹窗在键盘按回车将反复刷新_人生减负指南——iPad Pro+妙控键盘上手体验...
  7. MybatisPlus的CRUD操作
  8. java负载均衡搭建_负载均衡环境搭建(nginx和tomcat)
  9. CCPC-WFinal-女生专场
  10. 地图学相关知识(四)
  11. 全面了解决策管理平台
  12. 基于opengl编写简单的二维绘图软件
  13. Python解答多元线性方程组
  14. 几种混沌系统混沌模型
  15. 中美视觉谈标志设计分类
  16. 502 Bad Gateway 怎么解决?
  17. 软件中级设计师 - 面向对象开发
  18. matlab对于图像压缩,Matlab的图像压缩技术
  19. Java: 打印魔方阵
  20. 阿里百秀项目第二弹:准备工作

热门文章

  1. MATLAB图像分割——检测交通视频中的汽车目标
  2. feedburner怎么用_在FeedSky和FeedBurner中无缝切换
  3. [TJOI2019]唱、跳、rap和篮球——NTT+生成函数+容斥
  4. 如何用Android Stuido 调用百度翻译的API
  5. QCC3040---UI tones module
  6. 【Unity2D】制作游戏主菜单MainMenu
  7. php升序排列,php 基础问题表单里面怎么升序和降序?
  8. SQL Server 升序和降序排列
  9. 心理学在生活中的表现和应用_心理学在日常工作和社会生活中的应用.ppt
  10. 基于三星 bada 手机操作系统 的打泡泡游戏