Android开发ImageUtils工具演示
该工具提供缩放 drawable转换bitmap 转换倒影图 转换成圆角图
1 package com.nailsoul.imagedemo.utils;
2
3 import android.graphics.Bitmap;
4 import android.graphics.Canvas;
5 import android.graphics.LinearGradient;
6 import android.graphics.Matrix;
7 import android.graphics.Paint;
8 import android.graphics.PixelFormat;
9 import android.graphics.PorterDuffXfermode;
10 import android.graphics.Rect;
11 import android.graphics.RectF;
12 import android.graphics.Bitmap.Config;
13 import android.graphics.PorterDuff.Mode;
14 import android.graphics.Shader.TileMode;
15 import android.graphics.drawable.Drawable;
16
17 public class ImageUtil {
18
19 /**
20 * 放大缩小图片
21 * @param bitmap 要放大的图片
22 * @param dstWidth 目标宽
23 * @param dstHeight 目标高
24 * @return
25 */
26 public static Bitmap zoomBitmap(Bitmap bitmap, int dstWidth, int dstHeight) {
27 int width = bitmap.getWidth();
28 int height = bitmap.getHeight();
29 Matrix matrix = new Matrix();
30 float scaleWidht = ((float) dstWidth / width);
31 float scaleHeight = ((float) dstHeight / height);
32 matrix.postScale(scaleWidht, scaleHeight);
33 Bitmap newbmp = Bitmap.createBitmap(bitmap, 0, 0, width, height,
34 matrix, true);
35 return newbmp;
36 }
37
38 /**
39 * 将Drawable转化为Bitmap
40 * @param drawable
41 * @return
42 */
43 public static Bitmap drawableToBitmap(Drawable drawable) {
44 int width = drawable.getIntrinsicWidth();
45 int height = drawable.getIntrinsicHeight();
46 Bitmap bitmap = Bitmap.createBitmap(width, height, drawable
47 .getOpacity() != PixelFormat.OPAQUE ? Bitmap.Config.ARGB_8888
48 : Bitmap.Config.RGB_565);
49 Canvas canvas = new Canvas(bitmap);
50 drawable.setBounds(0, 0, width, height);
51 drawable.draw(canvas);
52 return bitmap;
53
54 }
55
56 /**
57 * 获得圆角图片的方法
58 * @param bitmap
59 * @param roundPx 4脚幅度
60 * @return
61 */
62 public static Bitmap getRoundedCornerBitmap(Bitmap bitmap, float roundPx) {
63
64 Bitmap output = Bitmap.createBitmap(bitmap.getWidth(),
65 bitmap.getHeight(), Config.ARGB_8888);
66 Canvas canvas = new Canvas(output);
67
68 final int color = 0xff424242;
69 final Paint paint = new Paint();
70 final Rect rect = new Rect(0, 0, bitmap.getWidth(), bitmap.getHeight());
71 final RectF rectF = new RectF(rect);
72
73 paint.setAntiAlias(true);
74 canvas.drawARGB(0, 0, 0, 0);
75 paint.setColor(color);
76 canvas.drawRoundRect(rectF, roundPx, roundPx, paint);
77
78 paint.setXfermode(new PorterDuffXfermode(Mode.SRC_IN));
79 canvas.drawBitmap(bitmap, rect, rect, paint);
80
81 return output;
82 }
83
84 /**
85 * 获得带倒影的图片方法
86 * @param bitmap
87 * @return
88 */
89 public static Bitmap createReflectionImageWithOrigin(Bitmap bitmap) {
90 final int reflectionGap = 4;
91 int width = bitmap.getWidth();
92 int height = bitmap.getHeight();
93
94 Matrix matrix = new Matrix();
95 matrix.preScale(1, -1);
96
97 Bitmap reflectionImage = Bitmap.createBitmap(bitmap, 0, height / 2,
98 width, height / 2, matrix, false);
99
100 Bitmap bitmapWithReflection = Bitmap.createBitmap(width,
101 (height + height / 2), Config.ARGB_8888);
102
103 Canvas canvas = new Canvas(bitmapWithReflection);
104 canvas.drawBitmap(bitmap, 0, 0, null);
105 Paint deafalutPaint = new Paint();
106 canvas.drawRect(0, height, width, height + reflectionGap, deafalutPaint);
107
108 canvas.drawBitmap(reflectionImage, 0, height + reflectionGap, null);
109
110 Paint paint = new Paint();
111 LinearGradient shader = new LinearGradient(0, bitmap.getHeight(), 0,
112 bitmapWithReflection.getHeight() + reflectionGap, 0x70ffffff,
113 0x00ffffff, TileMode.CLAMP);
114 paint.setShader(shader);
115 // Set the Transfer mode to be porter duff and destination in
116 paint.setXfermode(new PorterDuffXfermode(Mode.DST_IN));
117 // Draw a rectangle using the paint with our linear gradient
118 canvas.drawRect(0, height, width, bitmapWithReflection.getHeight()
119 + reflectionGap, paint);
120
121 return bitmapWithReflection;
122 }
123
124 }
1 package com.nailsoul.imagedemo;
2
3 import java.util.Random;
4
5 import android.app.Activity;
6 import android.graphics.Bitmap;
7 import android.graphics.drawable.Drawable;
8 import android.os.Bundle;
9 import android.view.View;
10 import android.view.Window;
11 import android.view.WindowManager;
12 import android.widget.ImageView;
13 import android.widget.TextView;
14
15 import com.nailsoul.imagedemo.utils.ImageUtil;
16
17 public class ImageDemoActivity extends Activity {
18 private ImageView mIv01, mIv02,mIv03;
19 private TextView mTv01, mtv02,mtv03,mtv00;
20
21 public void onCreate(Bundle savedInstanceState) {
22 super.onCreate(savedInstanceState);
23 int flag=WindowManager.LayoutParams.FLAG_FULLSCREEN;
24 getWindow().setFlags(flag,flag);
25 getWindow().requestFeature(Window.FEATURE_NO_TITLE);
26 setContentView(R.layout.main);
27 setupViews();
28 }
29
30 private void setupViews() {
31 mIv01 = findView(R.id.image01);
32 mIv02 = findView(R.id.image02);
33 mIv03 = findView(R.id.image03);
34 mtv00=findView(R.id.text00);
35 mTv01=findView(R.id.text01);
36 mtv02=findView(R.id.text02);
37 mtv03=findView(R.id.text03);
38
39 // 获取壁纸返回值是Drawable
40 // Drawable drawable = getWallpaper();
41 Drawable drawable=getResources().getDrawable(R.drawable.a1+new Random().nextInt(15));
42 // 将Drawable转化为Bitmap
43 Bitmap bitmap = ImageUtil.drawableToBitmap(drawable);
44 // 缩放图片
45 Bitmap zoomBitmap = ImageUtil.zoomBitmap(bitmap, 355, 317);
46 // 获取圆角图片
47 Bitmap roundBitmap = ImageUtil
48 .getRoundedCornerBitmap(bitmap, 10.0f);
49 // 获取倒影图片
50 Bitmap reflectBitmap = ImageUtil
51 .createReflectionImageWithOrigin(zoomBitmap);
52 // 这里可以让Bitmap再转化为Drawable
53 // Drawable roundDrawable = new BitmapDrawable(roundBitmap);
54 // Drawable reflectDrawable = new BitmapDrawable(reflectBitmap);
55 // mImageView01.setBackgroundDrawable(roundDrawable);
56 // mImageView02.setBackgroundDrawable(reflectDrawable);
57
58 mIv01.setImageBitmap(roundBitmap);
59 mIv02.setImageBitmap(reflectBitmap);
60 mIv03.setImageBitmap(zoomBitmap);
61 mtv00.setText("ImageUtils演示");
62 mTv01.setText("上图为圆角图 width:"+roundBitmap.getWidth()+"height:"+roundBitmap.getHeight());
63 mtv02.setText("上图为倒影图 width:"+reflectBitmap.getWidth()+"height:"+reflectBitmap.getHeight());
64 mtv03.setText("上图为缩放图 width:"+zoomBitmap.getWidth()+"height:"+zoomBitmap.getHeight());
65 }
66
67
68
69 public <T> T findView(int id){
70 return (T) super.findViewById(id);
71 }
72 }
1 <?xml version="1.0" encoding="utf-8"?> 2 <LinearLayout xmlns:android="http://schemas.android.com/apk/res/android" 3 android:layout_width="fill_parent" 4 android:layout_height="fill_parent" 5 android:orientation="vertical" > 6 7 <ScrollView 8 android:layout_width="fill_parent" 9 android:layout_height="fill_parent" 10 android:scrollbars="vertical" > 11 12 <LinearLayout 13 android:layout_width="fill_parent" 14 android:layout_height="fill_parent" 15 android:orientation="vertical" > 16 17 <TextView 18 android:id="@+id/text00" 19 android:layout_width="fill_parent" 20 android:layout_height="wrap_content" 21 android:gravity="center" /> 22 23 <ImageView 24 android:id="@+id/image01" 25 android:layout_width="wrap_content" 26 android:layout_height="wrap_content" 27 android:padding="10px" /> 28 29 <TextView 30 android:id="@+id/text01" 31 android:layout_width="fill_parent" 32 android:layout_height="wrap_content" 33 android:gravity="center" /> 34 35 <ImageView 36 android:id="@+id/image02" 37 android:layout_width="wrap_content" 38 android:layout_height="wrap_content" 39 android:padding="10px" /> 40 41 <TextView 42 android:id="@+id/text02" 43 android:layout_width="fill_parent" 44 android:layout_height="wrap_content" 45 android:gravity="center" /> 46 47 <ImageView 48 android:id="@+id/image03" 49 android:layout_width="wrap_content" 50 android:layout_height="wrap_content" 51 android:padding="10px" /> 52 53 <TextView 54 android:id="@+id/text03" 55 android:layout_width="fill_parent" 56 android:layout_height="wrap_content" 57 android:gravity="center" /> 58 </LinearLayout> 59 </ScrollView> 60 61 </LinearLayout>
来源:http://www.open-open.com/lib/view/open1382151866948.html