標籤:android style blog http color io os ar java
在Android的UI開發中經常會遇到圖片的縮放,就比如記事本,現在的圖片都比較大,如果將原圖不經縮放直接放在螢幕上,則會佔滿整個螢幕,而且有時 圖片會比螢幕還大,這時就不能完全的顯示整個圖片,所以,必須要進行縮放,但在縮放時,該如何縮放呢,長和寬的縮放比例設定為多少合適呢,為了保持原圖的 縱橫比,所以要最好的方法就是約束縮放比例,也就是等比例縮放,相信大家都用過PS中的縮放圖片的功能,有個選項就是約束縮放比例,也就是保持縱橫比,即 等比例縮放。
縮放前 縮放後
等比例的縮放思想很簡單,就是在縮放的過程中保持縱橫比,代碼如下:
[java] view plaincopy
- //等比例縮放圖片
- private Bitmap resize(Bitmap bitmap,int S){
- int imgWidth = bitmap.getWidth();
- int imgHeight = bitmap.getHeight();
- double partion = imgWidth*1.0/imgHeight;
- double sqrtLength = Math.sqrt(partion*partion + 1);
- //新的縮圖大小
- double newImgW = S*(partion / sqrtLength);
- double newImgH = S*(1 / sqrtLength);
- float scaleW = (float) (newImgW/imgWidth);
- float scaleH = (float) (newImgH/imgHeight);
-
- Matrix mx = new Matrix();
- //對原圖片進行縮放
- mx.postScale(scaleW, scaleH);
- bitmap = Bitmap.createBitmap(bitmap, 0, 0, imgWidth, imgHeight, mx, true);
- return bitmap;
- }
-
其中,S是長和寬縮放到的最大像素。
今天再來實現一個給圖片添加邊框效果,當然了,這裡我簡單的添加了一個線條邊框,也可以用其他好看的邊框加在圖片上,先看:
其實,給圖片加邊框的思想,就是在圖片的四周繪製一個矩形,代碼如下:
[java] view plaincopy
- //給圖片加邊框,並返回邊框後的圖片
- public Bitmap getBitmapHuaSeBianKuang(Bitmap bitmap) {
- float frameSize = 0.2f;
- Matrix matrix = new Matrix();
-
- // 用來做底圖
- Bitmap bitmapbg = Bitmap.createBitmap(bitmap.getWidth(),
- bitmap.getHeight(), Bitmap.Config.ARGB_8888);
-
- // 設定底圖為畫布
- Canvas canvas = new Canvas(bitmapbg);
- canvas.setDrawFilter(new PaintFlagsDrawFilter(0, Paint.ANTI_ALIAS_FLAG
- | Paint.FILTER_BITMAP_FLAG));
-
- float scale_x = (bitmap.getWidth() - 2 * frameSize - 2) * 1f
- / (bitmap.getWidth());
- float scale_y = (bitmap.getHeight() - 2 * frameSize - 2) * 1f
- / (bitmap.getHeight());
- matrix.reset();
- matrix.postScale(scale_x, scale_y);
-
- // 對相片大小處理(減去邊框的大小)
- bitmap = Bitmap.createBitmap(bitmap, 0, 0, bitmap.getWidth(),
- bitmap.getHeight(), matrix, true);
-
- Paint paint = new Paint();
- paint.setColor(Color.WHITE);
- paint.setStrokeWidth(1);
- paint.setStyle(Style.FILL);
-
- // 繪製底圖邊框
- canvas.drawRect(
- new Rect(0, 0, bitmapbg.getWidth(), bitmapbg.getHeight()),
- paint);
- // 繪製灰色邊框
- paint.setColor(Color.BLUE);
- canvas.drawRect(
- new Rect((int) (frameSize), (int) (frameSize), bitmapbg
- .getWidth() - (int) (frameSize), bitmapbg.getHeight()
- - (int) (frameSize)), paint);
-
- canvas.drawBitmap(bitmap, frameSize + 1, frameSize + 1, paint);
-
- return bitmapbg;
android項目 之 記事本(12) ----- 圖片的等比例縮放及給圖片添加邊框