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. }  
  • 相关阅读:
    2020年. NET Core面试题
    java Context namespace element 'component-scan' and its parser class ComponentScanBeanDefinitionParser are only available on JDK 1.5 and higher 解决方法
    vue 淡入淡出组件
    java http的get、post、post json参数的方法
    vue 父子组件通讯案例
    Vue 生产环境解决跨域问题
    npm run ERR! code ELIFECYCLE
    Android Studio 生成apk 出现 :error_prone_annotations.jar (com.google.errorprone:error) 错误
    记忆解析者芜青【总集】
    LwIP应用开发笔记之十:LwIP带操作系统基本移植
  • 原文地址:https://www.cnblogs.com/Free-Thinker/p/6722112.html
Copyright © 2011-2022 走看看