android项目 之 记事本(12) ----- 图片的等比例缩放及给图片添加边框

在Android的UI开发中经常会遇到图片的缩放,就比如记事本,现在的图片都比较大,如果将原图不经缩放直接放在屏幕上,则会占满整个屏幕,而且有时 图片会比屏幕还大,这时就不能完全的显示整个图片,所以,必须要进行缩放,但在缩放时,该如何缩放呢,长和宽的缩放比例设置为多少合适呢,为了保持原图的 纵横比,所以要最好的方法就是约束缩放比例,也就是等比例缩放,相信大家都用过PS中的缩放图片的功能,有个选项就是约束缩放比例,也就是保持纵横比,即 等比例缩放。

     

                                       缩放前                                                                                 缩放后

     等比例的缩放思想很简单,就是在缩放的过程中保持纵横比,代码如下:   

  1.         //等比例缩放图片  
  2.     private Bitmap resize(Bitmap bitmap,int S){  
  3.         int imgWidth = bitmap.getWidth();  
  4.         int imgHeight = bitmap.getHeight();  
  5.         double partion = imgWidth*1.0/imgHeight;  
  6.         double sqrtLength = Math.sqrt(partion*partion + 1);  
  7.         //新的缩略图大小  
  8.         double newImgW = S*(partion / sqrtLength);  
  9.         double newImgH = S*(1 / sqrtLength);  
  10.         float scaleW = (float) (newImgW/imgWidth);  
  11.         float scaleH = (float) (newImgH/imgHeight);  
  12.           
  13.         Matrix mx = new Matrix();  
  14.         //对原图片进行缩放  
  15.         mx.postScale(scaleW, scaleH);  
  16.         bitmap = Bitmap.createBitmap(bitmap, 0, 0, imgWidth, imgHeight, mx, true);  
  17.         return bitmap;  
  18.     }  
  19.       

     其中,S是长和宽缩放到的最大像素。

      今天再来实现一个给图片添加边框效果,当然了,这里我简单的添加了一个线条边框,也可以用其他好看的边框加在图片上,先看效果图:

       其实,给图片加边框的思想,就是在图片的四周绘制一个矩形,代码如下:

 

    1.         //给图片加边框,并返回边框后的图片  
    2.     public Bitmap getBitmapHuaSeBianKuang(Bitmap bitmap) {  
    3.         float frameSize = 0.2f;  
    4.         Matrix matrix = new Matrix();  
    5.    
    6.         // 用来做底图  
    7.         Bitmap bitmapbg = Bitmap.createBitmap(bitmap.getWidth(),  
    8.                 bitmap.getHeight(), Bitmap.Config.ARGB_8888);  
    9.    
    10.         // 设置底图为画布  
    11.         Canvas canvas = new Canvas(bitmapbg);  
    12.         canvas.setDrawFilter(new PaintFlagsDrawFilter(0, Paint.ANTI_ALIAS_FLAG  
    13.                 | Paint.FILTER_BITMAP_FLAG));  
    14.    
    15.         float scale_x = (bitmap.getWidth() - 2 * frameSize - 2) * 1f  
    16.                 / (bitmap.getWidth());  
    17.         float scale_y = (bitmap.getHeight() - 2 * frameSize - 2) * 1f  
    18.                 / (bitmap.getHeight());  
    19.         matrix.reset();  
    20.         matrix.postScale(scale_x, scale_y);  
    21.    
    22.         // 对相片大小处理(减去边框的大小)  
    23.         bitmap = Bitmap.createBitmap(bitmap, 0, 0, bitmap.getWidth(),  
    24.                 bitmap.getHeight(), matrix, true);  
    25.    
    26.         Paint paint = new Paint();  
    27.         paint.setColor(Color.WHITE);  
    28.         paint.setStrokeWidth(1);  
    29.         paint.setStyle(Style.FILL);  
    30.    
    31.         // 绘制底图边框  
    32.         canvas.drawRect(  
    33.                 new Rect(0, 0, bitmapbg.getWidth(), bitmapbg.getHeight()),  
    34.                 paint);  
    35.         // 绘制灰色边框  
    36.         paint.setColor(Color.BLUE);  
    37.         canvas.drawRect(  
    38.                 new Rect((int) (frameSize), (int) (frameSize), bitmapbg  
    39.                         .getWidth() - (int) (frameSize), bitmapbg.getHeight()  
    40.                         - (int) (frameSize)), paint);  
    41.    
    42.         canvas.drawBitmap(bitmap, frameSize + 1, frameSize + 1, paint);  
    43.    
    44.         return bitmapbg;  

郑重声明:本站内容如果来自互联网及其他传播媒体,其版权均属原媒体及文章作者所有。转载目的在于传递更多信息及用于网络分享,并不代表本站赞同其观点和对其真实性负责,也不构成任何其他建议。