zoukankan      html  css  js  c++  java
  • android图像处理系列之五--给图片添加边框(中)

    前面一篇讲到给图片加边框的方式,只能给图片加一些有规则的边框,如果想加一些比较精美的效果,就有点麻烦了。下面就给出解决这个问题的思路。

    思路是:一些比较精美的花边图片我们是很难用代码控制,就目前本人水平是达不到,不排除牛人,再说了PS那些效果都是程序员做出来,肯定有实现的方法,这可能就要涉及很复杂的图形学。扯远了,接来说怎么用那些精美的花边做为图片的边框。简单的方式是用两张图片叠加。最简单的一种是本文介绍的,用透明的PNG格式图片。因为Android是支持PNG图片处理的,而且PNG图片有透明度值,所以,添加那些花边边框可以先把图片做成全透明的(美工做图片的时候可以先创建一张全透明图片,再往图片上添加花边。),然后再叠加上去就OK了。要注意的是,边框有大小,最好是大一点,如果要处理的图片比较大,可以先将缩放到一定比例,再添加边框;如果边框比图片大,先要对边框进行缩放,具体缩放见前面的android图像处理系列之二--图片旋转、缩放、反转,这里面就不贴代码了。

    废话少说,下面看效果图:(截图的时候图片大小不一样,比较丑)

        +     

    代码:

    这里的res是边框图片,还是一样,不建议放到drawable下面,最后是放到assets目录,原因就不用说了吧

    1. /** 
    2.  * 添加边框 
    3.  * @param bm 原图片 
    4.  * @param res 边框资源 
    5.  * @return 
    6.  */  
    7. private Bitmap addBigFrame(Bitmap bm, int res)  
    8. {  
    9.     Bitmap bitmap = decodeBitmap(res);  
    10.     Drawable[] array = new Drawable[2];  
    11.     array[0] = new BitmapDrawable(bm);  
    12.     Bitmap b = resize(bitmap, bm.getWidth(), bm.getHeight());  
    13.     array[1] = new BitmapDrawable(b);  
    14.     LayerDrawable layer = new LayerDrawable(array);  
    15.     return drawableToBitmap(layer);  
    16. }  
    17.   
    18. /** 
    19.  * 将Drawable转换成Bitmap 
    20.  * @param drawable 
    21.  * @return 
    22.  */  
    23. private Bitmap drawableToBitmap(Drawable drawable)  
    24. {  
    25.     Bitmap bitmap = Bitmap.createBitmap(drawable.getIntrinsicWidth(), drawable.getIntrinsicHeight(), drawable.getOpacity() != PixelFormat.OPAQUE ? Bitmap.Config.ARGB_8888 : Bitmap.Config.RGB_565);  
    26.     Canvas canvas = new Canvas(bitmap);  
    27.     // canvas.setBitmap(bitmap);  
    28.     drawable.setBounds(0, 0, drawable.getIntrinsicWidth(), drawable.getIntrinsicHeight());  
    29.     drawable.draw(canvas);  
    30.     return bitmap;  
    31. }  
    32.   
    33. /** 
    34.  * 将R.drawable.*转换成Bitmap 
    35.  * @param res 
    36.  * @return 
    37.  */  
    38. private Bitmap decodeBitmap(int res)  
    39. {  
    40.     return BitmapFactory.decodeResource(mContext.getResources(), res);  
    41. }  
  • 相关阅读:
    Java数据结构和算法总结-数组、二分查找
    Android开发必知--使用View.setId的正确姿势
    Fiddler基本用法以及如何对手机抓包
    Android学习笔记(十四)方便实用的首选项-PreferenceActivity
    Android学习笔记(十三)SharedPreference必须掌握的基础
    设计模式之单例模式
    关于如何控制一个页面的Ajax读数据只读一次的简单解决办法!
    ASP.NET MVC 表单提交多层子级实体集合数据到控制器中
    使用Bootstrap的popover标签中嵌入插件,并且为插件注册事件实现Ajax与后台交互
    关于.Net使用企业库访问MySql数据库
  • 原文地址:https://www.cnblogs.com/Free-Thinker/p/6722112.html
Copyright © 2011-2022 走看看