前面一篇講到給圖片加邊框的方式,只能給圖片加一些有規則的邊框,如果想加一些比較精美的效果,就有點麻煩了。下面就給出解決這個問題的思路。
思路是:一些比較精美的花邊圖片我們是很難用代碼控制,就目前本人水平是達不到,不排除牛人,再說了PS那些效果都是程序員做出來,肯定有實現的方法,這可能就要涉及很復雜的圖形學。扯遠了,接來說怎么用那些精美的花邊做為圖片的邊框。簡單的方式是用兩張圖片疊加。最簡單的一種是本文介紹的,用透明的PNG格式圖片。因為Android是支持PNG圖片處理的,而且PNG圖片有透明度值,所以,添加那些花邊邊框可以先把圖片做成全透明的(美工做圖片的時候可以先創建一張全透明圖片,再往圖片上添加花邊。),然后再疊加上去就OK了。要注意的是,邊框有大小,最好是大一點,如果要處理的圖片比較大,可以先將縮放到一定比例,再添加邊框;如果邊框比圖片大,先要對邊框進行縮放,具體縮放見前面的android圖像處理系列之二--圖片旋轉、縮放、反轉,這里面就不貼代碼了。
廢話少說,下面看效果圖:(截圖的時候圖片大小不一樣,比較丑)



代碼:
這里的res是邊框圖片,還是一樣,不建議放到drawable下面,最后是放到assets目錄,原因就不用說了吧
- /**
- * 添加邊框
- * @param bm 原圖片
- * @param res 邊框資源
- * @return
- */
- private Bitmap addBigFrame(Bitmap bm, int res)
- {
- Bitmap bitmap = decodeBitmap(res);
- Drawable[] array = new Drawable[2];
- array[0] = new BitmapDrawable(bm);
- Bitmap b = resize(bitmap, bm.getWidth(), bm.getHeight());
- array[1] = new BitmapDrawable(b);
- LayerDrawable layer = new LayerDrawable(array);
- return drawableToBitmap(layer);
- }
- /**
- * 將Drawable轉換成Bitmap
- * @param drawable
- * @return
- */
- private Bitmap drawableToBitmap(Drawable drawable)
- {
- Bitmap bitmap = Bitmap.createBitmap(drawable.getIntrinsicWidth(), drawable.getIntrinsicHeight(), drawable.getOpacity() != PixelFormat.OPAQUE ? Bitmap.Config.ARGB_8888 : Bitmap.Config.RGB_565);
- Canvas canvas = new Canvas(bitmap);
- // canvas.setBitmap(bitmap);
- drawable.setBounds(0, 0, drawable.getIntrinsicWidth(), drawable.getIntrinsicHeight());
- drawable.draw(canvas);
- return bitmap;
- }
- /**
- * 將R.drawable.*轉換成Bitmap
- * @param res
- * @return
- */
- private Bitmap decodeBitmap(int res)
- {
- return BitmapFactory.decodeResource(mContext.getResources(), res);
- }