Android 给图片加边框
图片处理时,有时需要为图片加一些边框,下面介绍一种为图片添加简单边框的方法。
基本思路是:将边框图片裁剪成八张小图片(图片大小最好一致,不然后面处理会很麻烦),分别对应左上角,左边,左下角,下边,右下角,右边,右上角,上边,其中左右上下只需要一个有效长度,就像重写水平进度条一样,只需要一个有效的长度,然后平铺,就达到了最后想要的效果,不错,左右上下边采用的也是这样的思路。也可以将八张图片组合在一起,然后读取整张图片,用代码裁剪,下面会给出相应的代码。下面的代码主要是给出第一种方法,后一种给出代码,有兴趣的可以自己试试。注意图片不要放到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 给图片加边框相关推荐
- android给图片加边框,android 图片加边框 ImageView border 成效
android 图片加边框 ImageView border 效果 1.布局文件 res/layout/some_page.xml android:id="@+id/respImageBor ...
- android给图片加边框,Android学习笔记进阶19之给图片加边框
//设置颜色 public void setColour(int color){ co = color; } //设置边框宽度 public void setBorderWidth(int width ...
- android 加载进度,Android实现图片加载进度提示
本文实例为大家分享了Android实现图片加载进度提示的具体代码,供大家参考,具体内容如下 先上图: 实现原理: 第一个控件的实现原理是重写ImageView的onDraw()方法,利用Canvas的 ...
- Android Glide图片加载框架(四)回调与监听
文章目录 Android Glide图片加载框架系列文章 Android Glide图片加载框架(一)基本用法 Android Glide图片加载框架(二)源码解析之with() Android Gl ...
- Android Glide图片加载框架(三)缓存机制
文章目录 一.缓存简介 二.缓存用法 内存缓存方式 磁盘缓存方式 三.缓存KEY 四.内存缓存 内存缓存流程 五.磁盘缓存 磁盘缓存流程 Android Glide图片加载框架系列文章 Android ...
- Android Glide图片加载框架(二)源码解析之into()
文章目录 一.前言 二.源码解析 1.into(ImageView) 2.GlideContext.buildImageViewTarget() 3.RequestBuilder.into(Targe ...
- Android Glide图片加载框架(二)源码解析之load()
文章目录 一.前言 二.源码分析 1.load() Android Glide图片加载框架系列文章 Android Glide图片加载框架(一)基本用法 Android Glide图片加载框架(二)源 ...
- Android Glide图片加载框架(二)源码解析之with()
文章目录 一.前言 二.如何阅读源码 三.源码解析 1.with() Android Glide图片加载框架系列文章 Android Glide图片加载框架(一)基本用法 Android Glide图 ...
- Android Glide图片加载框架(一)基本用法
文章目录 一.前言 二.简介 三.基本用法 第一步:调用 Glide.with() 方法创建加载图片的实例 第二步:调用 load() 方法指定待加载的图片资源 第三步:调用 into() 方法绑定显 ...
- 如何给照片加边框?图片加边框的3个实用方法
分享3个良心好用的照片加相框工具,个个都是操作简单,还提供了丰富好看的边框模板,瞬间让照片变得有质感,大家可以根据自己的需求选择对应的工具进行添加. 1.改图鸭 一个免费的图片处理网站,提供几十种图片 ...
最新文章
- Python-OpenCV设置摄像头分辨率
- 如何方便记忆和理解类图里的线条
- 基于JAVA+Servlet+JSP+MYSQL的交通罚单管理系统
- Disabling Shortcut Keys in Full Screen mode
- iOS App被拒原因以及解决方案总结。
- layer弹窗在键盘按回车将反复刷新_人生减负指南——iPad Pro+妙控键盘上手体验...
- MybatisPlus的CRUD操作
- java负载均衡搭建_负载均衡环境搭建(nginx和tomcat)
- CCPC-WFinal-女生专场
- 地图学相关知识(四)
- 全面了解决策管理平台
- 基于opengl编写简单的二维绘图软件
- Python解答多元线性方程组
- 几种混沌系统混沌模型
- 中美视觉谈标志设计分类
- 502 Bad Gateway 怎么解决?
- 软件中级设计师 - 面向对象开发
- matlab对于图像压缩,Matlab的图像压缩技术
- Java: 打印魔方阵
- 阿里百秀项目第二弹:准备工作
热门文章
- MATLAB图像分割——检测交通视频中的汽车目标
- feedburner怎么用_在FeedSky和FeedBurner中无缝切换
- [TJOI2019]唱、跳、rap和篮球——NTT+生成函数+容斥
- 如何用Android Stuido 调用百度翻译的API
- QCC3040---UI tones module
- 【Unity2D】制作游戏主菜单MainMenu
- php升序排列,php 基础问题表单里面怎么升序和降序?
- SQL Server 升序和降序排列
- 心理学在生活中的表现和应用_心理学在日常工作和社会生活中的应用.ppt
- 基于三星 bada 手机操作系统 的打泡泡游戏