android項目 之 記事本(12) ----- 圖片的等比例縮放及給圖片添加邊框

來源:互聯網
上載者:User

標籤:android   style   blog   http   color   io   os   ar   java   

在Android的UI開發中經常會遇到圖片的縮放,就比如記事本,現在的圖片都比較大,如果將原圖不經縮放直接放在螢幕上,則會佔滿整個螢幕,而且有時 圖片會比螢幕還大,這時就不能完全的顯示整個圖片,所以,必須要進行縮放,但在縮放時,該如何縮放呢,長和寬的縮放比例設定為多少合適呢,為了保持原圖的 縱橫比,所以要最好的方法就是約束縮放比例,也就是等比例縮放,相信大家都用過PS中的縮放圖片的功能,有個選項就是約束縮放比例,也就是保持縱橫比,即 等比例縮放。

     

                                       縮放前                                                                                 縮放後

     等比例的縮放思想很簡單,就是在縮放的過程中保持縱橫比,代碼如下:   

[java] view plaincopy
  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是長和寬縮放到的最大像素。

      今天再來實現一個給圖片添加邊框效果,當然了,這裡我簡單的添加了一個線條邊框,也可以用其他好看的邊框加在圖片上,先看:

       其實,給圖片加邊框的思想,就是在圖片的四周繪製一個矩形,代碼如下:

 

[java] view plaincopy
    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;  

android項目 之 記事本(12) ----- 圖片的等比例縮放及給圖片添加邊框

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.