android图片处理方法(不断收集中)

尊重原创,博客内容摘抄至:http://gundumw100.iteye.com/blog/849729


1.//压缩图片大小  
2.    public static Bitmap compressImage(Bitmap image) {  
3.  
4.        ByteArrayOutputStream baos = new ByteArrayOutputStream();  
5.        image.compress(Bitmap.CompressFormat.JPEG, 100, baos);//质量压缩方法,这里100表示不压缩,把压缩后的数据存放到baos中  
6.        int options = 100;  
7.        while ( baos.toByteArray().length / 1024>100) {  //循环判断如果压缩后图片是否大于100kb,大于继续压缩         
8.            baos.reset();//重置baos即清空baos  
9.            image.compress(Bitmap.CompressFormat.JPEG, options, baos);//这里压缩options%,把压缩后的数据存放到baos中  
10.            options -= 10;//每次都减少10  
11.        }  
12.        ByteArrayInputStream isBm = new ByteArrayInputStream(baos.toByteArray());//把压缩后的数据baos存放到ByteArrayInputStream中  
13.        Bitmap bitmap = BitmapFactory.decodeStream(isBm, null, null);//把ByteArrayInputStream数据生成图片  
14.        return bitmap;  
15.    }  
 






Java代码  
1./**  
2.     * 将彩色图转换为灰度图  
3.     * @param img 位图  
4.     * @return  返回转换好的位图  
5.     */    
6.    public Bitmap convertGreyImg(Bitmap img) {    
7.        int width = img.getWidth();         //获取位图的宽    
8.        int height = img.getHeight();       //获取位图的高    
9.            
10.        int []pixels = new int[width * height]; //通过位图的大小创建像素点数组    
11.            
12.        img.getPixels(pixels, 0, width, 0, 0, width, height);    
13.        int alpha = 0xFF << 24;     
14.        for(int i = 0; i < height; i++)  {    
15.            for(int j = 0; j < width; j++) {    
16.                int grey = pixels[width * i + j];    
17.                    
18.                int red = ((grey  & 0x00FF0000 ) >> 16);    
19.                int green = ((grey & 0x0000FF00) >> 8);    
20.                int blue = (grey & 0x000000FF);    
21.                    
22.                grey = (int)((float) red * 0.3 + (float)green * 0.59 + (float)blue * 0.11);    
23.                grey = alpha | (grey << 16) | (grey << 8) | grey;    
24.                pixels[width * i + j] = grey;    
25.            }    
26.        }    
27.        Bitmap result = Bitmap.createBitmap(width, height, Config.RGB_565);    
28.        result.setPixels(pixels, 0, width, 0, 0, width, height);    
29.        return result;    
30.    }    
 






将一个图片切割成多个图片 
有种场景,我们想将一个图片切割成多个图片。比如我们在开发一个拼图的游戏,就首先要对图片进行切割。 
以下是封装好的两个类,可以实现图片的切割。仅供参考和学习。 
一个是ImagePiece类,此类保存了一个Bitmap对象和一个标识图片的顺序索引的int变量。 






Java代码  
1.import android.graphics.Bitmap;   
2.public class ImagePiece {     
3.    public int index = 0;          
4.    public Bitmap bitmap = null;    
5.}  
 
一个是ImageSplitter类,有一个静态方法split,传入的参数是要切割的Bitmap对象,和横向和竖向的切割片数。比如传入的是3、3,则横竖向都切割成3片,最终会将整个图片切割成3X3=9片。
 




Java代码  
1.import java.util.ArrayList;    
2.import java.util.List;    
3.    
4.import android.graphics.Bitmap;    
5.    
6.public class ImageSplitter {    
7.    
8.    public static List<ImagePiece> split(Bitmap bitmap, int xPiece, int yPiece) {    
9.    
10.        List<ImagePiece> pieces = new ArrayList<ImagePiece>(xPiece * yPiece);    
11.        int width = bitmap.getWidth();    
12.        int height = bitmap.getHeight();    
13.        int pieceWidth = width / 3;    
14.        int pieceHeight = height / 3;    
15.        for (int i = 0; i < yPiece; i++) {    
16.            for (int j = 0; j < xPiece; j++) {    
17.                ImagePiece piece = new ImagePiece();    
18.                piece.index = j + i * xPiece;    
19.                int xValue = j * pieceWidth;    
20.                int yValue = i * pieceHeight;    
21.                piece.bitmap = Bitmap.createBitmap(bitmap, xValue, yValue,    
22.                        pieceWidth, pieceHeight);    
23.                pieces.add(piece);    
24.            }    
25.        }    
26.    
27.        return pieces;    
28.    }    
29.    
30.}  
 


1、图标加灰色过滤; 
2、android的图片资源默认是静态的,单实例;如果两个IM好友的头像一样,最简单的都是用的软件自带头像,有一个在线,一个离线,直接改变头像的灰度,则两个用户的头像都会变灰或者在线,答案是:Drawable.mutate()。
 




Java代码  
1.Drawable mDrawable = context.getResources().getDrawable(R.drawable.face_icon);    
2.//Make this drawable mutable.    
3.//A mutable drawable is guaranteed to not share its state with any other drawable.    
4.mDrawable.mutate();    
5.ColorMatrix cm = new ColorMatrix();    
6.cm.setSaturation(0);    
7.ColorMatrixColorFilter cf = new ColorMatrixColorFilter(cm);    
8.mDrawable.setColorFilter(cf);  
 


生成缩略图,抠自android launcher源码: 






Java代码  
1./* 
2. * Copyright (C) 2008 The Android Open Source Project 
3. * 
4. * Licensed under the Apache License, Version 2.0 (the "License"); 
5. * you may not use this file except in compliance with the License. 
6. * You may obtain a copy of the License at 
7. * 
8. *      http://www.apache.org/licenses/LICENSE-2.0 
9. * 
10. * Unless required by applicable law or agreed to in writing, software 
11. * distributed under the License is distributed on an "AS IS" BASIS, 
12. * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. 
13. * See the License for the specific language governing permissions and 
14. * limitations under the License. 
15. */  
16.  
17.package com.android.launcher;  
18.  
19.import android.graphics.drawable.BitmapDrawable;  
20.import android.graphics.drawable.Drawable;  
21.import android.graphics.drawable.PaintDrawable;  
22.import android.graphics.Bitmap;  
23.import android.graphics.PixelFormat;  
24.import android.graphics.Canvas;  
25.import android.graphics.PaintFlagsDrawFilter;  
26.import android.graphics.Paint;  
27.import android.graphics.Rect;  
28.import android.content.res.Resources;  
29.import android.content.Context;  
30.  
31./** 
32. * Various utilities shared amongst the Launcher's classes. 
33. */  
34.final class Utilities {  
35.    private static int sIconWidth = -1;  
36.    private static int sIconHeight = -1;  
37.  
38.    private static final Paint sPaint = new Paint();  
39.    private static final Rect sBounds = new Rect();  
40.    private static final Rect sOldBounds = new Rect();  
41.    private static Canvas sCanvas = new Canvas();  
42.  
43.    static {  
44.        sCanvas.setDrawFilter(new PaintFlagsDrawFilter(Paint.DITHER_FLAG,  
45.                Paint.FILTER_BITMAP_FLAG));  
46.    }  
47.  
48.    /** 
49.     * Returns a Drawable representing the thumbnail of the specified Drawable. 
50.     * The size of the thumbnail is defined by the dimension 
51.     * android.R.dimen.launcher_application_icon_size. 
52.     * 
53.     * This method is not thread-safe and should be invoked on the UI thread only. 
54.     * 
55.     * @param icon The icon to get a thumbnail of. 
56.     * @param context The application's context. 
57.     * 
58.     * @return A thumbnail for the specified icon or the icon itself if the 
59.     *         thumbnail could not be created.  
60.     */  
61.    static Drawable createIconThumbnail(Drawable icon, Context context) {  
62.        if (sIconWidth == -1) {  
63.            final Resources resources = context.getResources();  
64.            sIconWidth = sIconHeight = (int) resources.getDimension(android.R.dimen.app_icon_size);  
65.        }  
66.  
67.        int width = sIconWidth;  
68.        int height = sIconHeight;  
69.  
70.        float scale = 1.0f;  
71.        if (icon instanceof PaintDrawable) {  
72.            PaintDrawable painter = (PaintDrawable) icon;  
73.            painter.setIntrinsicWidth(width);  
74.            painter.setIntrinsicHeight(height);  
75.        } else if (icon instanceof BitmapDrawable) {  
76.            // Ensure the bitmap has a density.  
77.            BitmapDrawable bitmapDrawable = (BitmapDrawable) icon;  
78.            Bitmap bitmap = bitmapDrawable.getBitmap();  
79.            if (bitmap.getDensity() == Bitmap.DENSITY_NONE) {  
80.                bitmapDrawable.setTargetDensity(context.getResources().getDisplayMetrics());  
81.            }  
82.        }  
83.        int iconWidth = icon.getIntrinsicWidth();  
84.        int iconHeight = icon.getIntrinsicHeight();  
85.  
86.        if (width > 0 && height > 0) {  
87.            if (width < iconWidth || height < iconHeight || scale != 1.0f) {  
88.                final float ratio = (float) iconWidth / iconHeight;  
89.  
90.                if (iconWidth > iconHeight) {  
91.                    height = (int) (width / ratio);  
92.                } else if (iconHeight > iconWidth) {  
93.                    width = (int) (height * ratio);  
94.                }  
95.  
96.                final Bitmap.Config c = icon.getOpacity() != PixelFormat.OPAQUE ?  
97.                            Bitmap.Config.ARGB_8888 : Bitmap.Config.RGB_565;  
98.                final Bitmap thumb = Bitmap.createBitmap(sIconWidth, sIconHeight, c);  
99.                final Canvas canvas = sCanvas;  
100.                canvas.setBitmap(thumb);  
101.                // Copy the old bounds to restore them later  
102.                // If we were to do oldBounds = icon.getBounds(),  
103.                // the call to setBounds() that follows would  
104.                // change the same instance and we would lose the  
105.                // old bounds  
106.                sOldBounds.set(icon.getBounds());  
107.                final int x = (sIconWidth - width) / 2;  
108.                final int y = (sIconHeight - height) / 2;  
109.                icon.setBounds(x, y, x + width, y + height);  
110.                icon.draw(canvas);  
111.                icon.setBounds(sOldBounds);  
112.                icon = new FastBitmapDrawable(thumb);  
113.            } else if (iconWidth < width && iconHeight < height) {  
114.                final Bitmap.Config c = Bitmap.Config.ARGB_8888;  
115.                final Bitmap thumb = Bitmap.createBitmap(sIconWidth, sIconHeight, c);  
116.                final Canvas canvas = sCanvas;  
117.                canvas.setBitmap(thumb);  
118.                sOldBounds.set(icon.getBounds());  
119.                final int x = (width - iconWidth) / 2;  
120.                final int y = (height - iconHeight) / 2;  
121.                icon.setBounds(x, y, x + iconWidth, y + iconHeight);  
122.                icon.draw(canvas);  
123.                icon.setBounds(sOldBounds);  
124.                icon = new FastBitmapDrawable(thumb);  
125.            }  
126.        }  
127.  
128.        return icon;  
129.    }  
130.  
131.    /** 
132.     * Returns a Bitmap representing the thumbnail of the specified Bitmap. 
133.     * The size of the thumbnail is defined by the dimension 
134.     * android.R.dimen.launcher_application_icon_size. 
135.     * 
136.     * This method is not thread-safe and should be invoked on the UI thread only. 
137.     * 
138.     * @param bitmap The bitmap to get a thumbnail of. 
139.     * @param context The application's context. 
140.     * 
141.     * @return A thumbnail for the specified bitmap or the bitmap itself if the 
142.     *         thumbnail could not be created. 
143.     */  
144.    static Bitmap createBitmapThumbnail(Bitmap bitmap, Context context) {  
145.        if (sIconWidth == -1) {  
146.            final Resources resources = context.getResources();  
147.            sIconWidth = sIconHeight = (int) resources.getDimension(  
148.                    android.R.dimen.app_icon_size);  
149.        }  
150.  
151.        int width = sIconWidth;  
152.        int height = sIconHeight;  
153.  
154.        final int bitmapWidth = bitmap.getWidth();  
155.        final int bitmapHeight = bitmap.getHeight();  
156.  
157.        if (width > 0 && height > 0) {  
158.            if (width < bitmapWidth || height < bitmapHeight) {  
159.                final float ratio = (float) bitmapWidth / bitmapHeight;  
160.      
161.                if (bitmapWidth > bitmapHeight) {  
162.                    height = (int) (width / ratio);  
163.                } else if (bitmapHeight > bitmapWidth) {  
164.                    width = (int) (height * ratio);  
165.                }  
166.      
167.                final Bitmap.Config c = (width == sIconWidth && height == sIconHeight) ?  
168.                        bitmap.getConfig() : Bitmap.Config.ARGB_8888;  
169.                final Bitmap thumb = Bitmap.createBitmap(sIconWidth, sIconHeight, c);  
170.                final Canvas canvas = sCanvas;  
171.                final Paint paint = sPaint;  
172.                canvas.setBitmap(thumb);  
173.                paint.setDither(false);  
174.                paint.setFilterBitmap(true);  
175.                sBounds.set((sIconWidth - width) / 2, (sIconHeight - height) / 2, width, height);  
176.                sOldBounds.set(0, 0, bitmapWidth, bitmapHeight);  
177.                canvas.drawBitmap(bitmap, sOldBounds, sBounds, paint);  
178.                return thumb;  
179.            } else if (bitmapWidth < width || bitmapHeight < height) {  
180.                final Bitmap.Config c = Bitmap.Config.ARGB_8888;  
181.                final Bitmap thumb = Bitmap.createBitmap(sIconWidth, sIconHeight, c);  
182.                final Canvas canvas = sCanvas;  
183.                final Paint paint = sPaint;  
184.                canvas.setBitmap(thumb);  
185.                paint.setDither(false);  
186.                paint.setFilterBitmap(true);  
187.                canvas.drawBitmap(bitmap, (sIconWidth - bitmapWidth) / 2,  
188.                        (sIconHeight - bitmapHeight) / 2, paint);  
189.                return thumb;  
190.            }  
191.        }  
192.  
193.        return bitmap;  
194.    }  
195.}  
 








Java代码  
1.//Android Matrix类实现镜像方法  
2.public void drawRegion(Image image_src,  
3.  
4.int x_src, int y_src,  
5.  
6.int width, int height,  
7.  
8.int transform,  
9.  
10.int x_dest, int y_dest,  
11.  
12.int anchor){  
13.  
14.if((anchor&VCENTER) != 0){  
15.  
16.y_dest -= height/2;  
17.  
18.}else if((anchor&BOTTOM) != 0){  
19.  
20.y_dest -= height;  
21.  
22.}  
23.  
24.if((anchor&RIGHT) != 0){  
25.  
26.x_dest -= width;  
27.  
28.}else if((anchor&HCENTER) != 0){  
29.  
30.x_dest -= width/2;  
31.  
32.}  
33.  
34.Bitmap newMap = Bitmap.createBitmap(image_src.getBitmap(), x_src, y_src, width, height);  
35.  
36.Matrix mMatrix = new Matrix();  
37.  
38.Matrix temp = new Matrix();  
39.  
40.Matrix temp2 = new Matrix();  
41.  
42.float[] mirrorY = {  
43.  
44.-1, 0, 0,  
45.0, 1, 0,  
46.0, 0, 1  
47.  
48.};  
49.  
50.temp.setValues(mirrorY);  
51.  
52.switch(transform){  
53.  
54.case Sprite.TRANS_NONE:  
55.  
56.break;  
57.  
58.case Sprite.TRANS_ROT90:  
59.  
60.mMatrix.setRotate(90,width/2, height/2);  
61.  
62.break;  
63.  
64.case Sprite.TRANS_ROT180:  
65.  
66.mMatrix.setRotate(180,width/2, height/2);  
67.  
68.break;  
69.  
70.case Sprite.TRANS_ROT270:  
71.  
72.mMatrix.setRotate(270,width/2, height/2);  
73.  
74.break;  
75.  
76.case Sprite.TRANS_MIRROR:  
77.  
78.mMatrix.postConcat(temp);  
79.  
80.break;  
81.  
82.case Sprite.TRANS_MIRROR_ROT90:  
83.  
84.mMatrix.postConcat(temp);  
85.  
86.mMatrix.setRotate(90,width/2, height/2);  
87.  
88.break;  
89.  
90.case Sprite.TRANS_MIRROR_ROT180:  
91.  
92.mMatrix.postConcat(temp);  
93.  
94.mMatrix.setRotate(180,width/2, height/2);  
95.  
96.break;  
97.  
98.case Sprite.TRANS_MIRROR_ROT270:  
99.  
100.mMatrix.postConcat(temp);  
101.  
102.mMatrix.setRotate(270,width/2, height/2);  
103.  
104.break;  
105.  
106.}  
107.  
108.mMatrix.setTranslate(x_dest, y_dest);  
109.  
110.canvas.drawBitmap(newMap, mMatrix, mPaint);  
111.  
112.}  
 








Java代码  
1.//图片Url保存为位图并进行缩放操作  
2.//通过传入图片url获取位图方法  
3.public Bitmap returnBitMap(String url) {  
4.        URL myFileUrl = null;  
5.        Bitmap bitmap = null;  
6.        try {  
7.            myFileUrl = new URL(url);  
8.        } catch (MalformedURLException e) {  
9.            e.printStackTrace();  
10.        }  
11.        try {  
12.            HttpURLConnection conn = (HttpURLConnection) myFileUrl  
13.                    .openConnection();  
14.            conn.setDoInput(true);  
15.            conn.connect();  
16.            InputStream is = conn.getInputStream();  
17.            bitmap = BitmapFactory.decodeStream(is);  
18.            is.close();  
19.        } catch (IOException e) {  
20.            e.printStackTrace();  
21.        }  
22.        Log.v(tag, bitmap.toString());  
23.  
24.        return bitmap;  
25.    }  
26.//通过传入位图,新的宽.高比进行位图的缩放操作  
27.public static Drawable resizeImage(Bitmap bitmap, int w, int h) {  
28.  
29.        // load the origial Bitmap  
30.        Bitmap BitmapOrg = bitmap;  
31.  
32.        int width = BitmapOrg.getWidth();  
33.        int height = BitmapOrg.getHeight();  
34.        int newWidth = w;  
35.        int newHeight = h;  
36.  
37.        Log.v(tag, String.valueOf(width));  
38.        Log.v(tag, String.valueOf(height));  
39.  
40.        Log.v(tag, String.valueOf(newWidth));  
41.        Log.v(tag, String.valueOf(newHeight));  
42.  
43.        // calculate the scale  
44.        float scaleWidth = ((float) newWidth) / width;  
45.        float scaleHeight = ((float) newHeight) / height;  
46.  
47.        // create a matrix for the manipulation  
48.        Matrix matrix = new Matrix();  
49.        // resize the Bitmap  
50.        matrix.postScale(scaleWidth, scaleHeight);  
51.        // if you want to rotate the Bitmap  
52.        // matrix.postRotate(45);  
53.  
54.        // recreate the new Bitmap  
55.        Bitmap resizedBitmap = Bitmap.createBitmap(BitmapOrg, 0, 0, width,  
56.                height, matrix, true);  
57.  
58.        // make a Drawable from Bitmap to allow to set the Bitmap  
59.        // to the ImageView, ImageButton or what ever  
60.        return new BitmapDrawable(resizedBitmap);  
61.  
62.    }  
 








Java代码  
1.1.图片加载方法,方便用户加载图片  
2./*** 
3.* 加载本地图片 
4.* @param context:主运行函数实例 
5.* @param bitAdress:图片地址,一般指向R下的drawable目录 
6.* @return 
7.*/  
8.public final Bitmap CreatImage(Context context, int bitAdress) {  
9.Bitmap bitmaptemp = null;  
10.bitmaptemp = BitmapFactory.decodeResource(context.getResources(),  
11.bitAdress);  
12.return bitmaptemp;  
13.}  
14.2.图片平均分割方法,将大图平均分割为N行N列,方便用户使用  
15./*** 
16.* 图片分割 
17.* 
18.* @param g 
19.* :画布 
20.* @param paint 
21.* :画笔 
22.* @param imgBit 
23.* :图片 
24.* @param x 
25.* :X轴起点坐标 
26.* @param y 
27.* :Y轴起点坐标 
28.* @param w 
29.* :单一图片的宽度 
30.* @param h 
31.* :单一图片的高度 
32.* @param line 
33.* :第几列 
34.* @param row 
35.* :第几行 
36.*/  
37.public final void cuteImage(Canvas g, Paint paint, Bitmap imgBit, int x,  
38.int y, int w, int h, int line, int row) {  
39.g.clipRect(x, y, x + w, h + y);  
40.g.drawBitmap(imgBit, x – line * w, y – row * h, paint);  
41.g.restore();  
42.}  
43.3.图片缩放,对当前图片进行缩放处理  
44./*** 
45.* 图片的缩放方法 
46.* 
47.* @param bgimage 
48.* :源图片资源 
49.* @param newWidth 
50.* :缩放后宽度 
51.* @param newHeight 
52.* :缩放后高度 
53.* @return 
54.*/  
55.public Bitmap zoomImage(Bitmap bgimage, int newWidth, int newHeight) {  
56.// 获取这个图片的宽和高  
57.int width = bgimage.getWidth();  
58.int height = bgimage.getHeight();  
59.// 创建操作图片用的matrix对象  
60.Matrix matrix = new Matrix();  
61.// 计算缩放率,新尺寸除原始尺寸  
62.float scaleWidth = ((float) newWidth) / width;  
63.float scaleHeight = ((float) newHeight) / height;  
64.// 缩放图片动作  
65.matrix.postScale(scaleWidth, scaleHeight);  
66.Bitmap bitmap = Bitmap.createBitmap(bgimage, 0, 0, width, height,  
67.matrix, true);  
68.return bitmap;  
69.}  
70.4.绘制带有边框的文字,一般在游戏中起文字的美化作用  
71./*** 
72.* 绘制带有边框的文字 
73.* 
74.* @param strMsg 
75.* :绘制内容 
76.* @param g 
77.* :画布 
78.* @param paint 
79.* :画笔 
80.* @param setx 
81.* ::X轴起始坐标 
82.* @param sety 
83.* :Y轴的起始坐标 
84.* @param fg 
85.* :前景色 
86.* @param bg 
87.* :背景色 
88.*/  
89.public void drawText(String strMsg, Canvas g, Paint paint, int setx,  
90.int sety, int fg, int bg) {  
91.paint.setColor(bg);  
92.g.drawText(strMsg, setx + 1, sety, paint);  
93.g.drawText(strMsg, setx, sety – 1, paint);  
94.g.drawText(strMsg, setx, sety + 1, paint);  
95.g.drawText(strMsg, setx – 1, sety, paint);  
96.paint.setColor(fg);  
97.g.drawText(strMsg, setx, sety, paint);  
98.g.restore();  
99.}  
100.5.Android 图片透明度处理代码  
101./** 
102.* 图片透明度处理 
103.* 
104.* @param sourceImg 
105.*            原始图片 
106.* @param number 
107.*            透明度 
108.* @return 
109.*/  
110.public static Bitmap setAlpha(Bitmap sourceImg, int number) {  
111.int[] argb = new int[sourceImg.getWidth() * sourceImg.getHeight()];  
112.sourceImg.getPixels(argb, 0, sourceImg.getWidth(), 0, 0,sourceImg.getWidth(), sourceImg.getHeight());// 获得图片的ARGB值  
113.number = number * 255 / 100;  
114.for (int i = 0; i < argb.length; i++) {  
115.argb = (number << 24) | (argb & 0×00FFFFFF);// 修改最高2位的值  
116.}  
117.sourceImg = Bitmap.createBitmap(argb, sourceImg.getWidth(), sourceImg.getHeight(), Config.ARGB_8888);  
118.return sourceImg;  
119.}  
120.6.图片翻转  
121.Resources res = this.getContext().getResources();  
122.img = BitmapFactory.decodeResource(res, R.drawable.slogo);  
123.Matrix matrix = new Matrix();  
124.matrix.postRotate(90);        /*翻转90度*/  
125.int width = img.getWidth();  
126.int height = img.getHeight();  
127.r_img = Bitmap.createBitmap(img, 0, 0, width, height, matrix, true);  
 






Java代码  
1.import android.graphics.Bitmap;  
2.import android.graphics.Canvas;  
3.import android.graphics.LinearGradient;  
4.import android.graphics.Matrix;  
5.import android.graphics.Paint;  
6.import android.graphics.PixelFormat;  
7.import android.graphics.PorterDuffXfermode;  
8.import android.graphics.Rect;  
9.import android.graphics.RectF;  
10.import android.graphics.Bitmap.Config;  
11.import android.graphics.PorterDuff.Mode;  
12.import android.graphics.Shader.TileMode;  
13.import android.graphics.drawable.Drawable;  
14./** 
15.*  
16.* @author superdev 
17.* @version 1.0 
18.* 
19.*/  
20.public class ImageUtil {  
21.  
22./** 
23.* 放大缩小图片 
24.*/  
25.public static Bitmap zoomBitmap(Bitmap bitmap, int w, int h) {  
26.   int width = bitmap.getWidth();  
27.   int height = bitmap.getHeight();  
28.   Matrix matrix = new Matrix();  
29.   float scaleWidht = ((float) w / width);  
30.   float scaleHeight = ((float) h / height);  
31.   matrix.postScale(scaleWidht, scaleHeight);  
32.   Bitmap newbmp = Bitmap.createBitmap(bitmap, 0, 0, width, height, matrix, true);  
33.   return newbmp;  
34.}  
35.  
36./** 
37.* 将Drawable转化为Bitmap 
38.*/  
39.public static Bitmap drawableToBitmap(Drawable drawable) {  
40.   int width = drawable.getIntrinsicWidth();  
41.   int height = drawable.getIntrinsicHeight();  
42.   Bitmap bitmap = Bitmap.createBitmap(width, height, drawable.getOpacity() != PixelFormat.OPAQUE ? Bitmap.Config.ARGB_8888 : Bitmap.Config.RGB_565);  
43.   Canvas canvas = new Canvas(bitmap);  
44.   drawable.setBounds(0, 0, width, height);  
45.   drawable.draw(canvas);  
46.   return bitmap;  
47.  
48.}  
49.  
50./** 
51.* 获得圆角图片的方法 
52.*/  
53.public static Bitmap getRoundedCornerBitmap(Bitmap bitmap, float roundPx) {  
54.  
55.   Bitmap output = Bitmap.createBitmap(bitmap.getWidth(), bitmap.getHeight(), Config.ARGB_8888);  
56.   Canvas canvas = new Canvas(output);  
57.  
58.   final int color = 0xff424242;  
59.   final Paint paint = new Paint();  
60.   final Rect rect = new Rect(0, 0, bitmap.getWidth(), bitmap.getHeight());  
61.   final RectF rectF = new RectF(rect);  
62.  
63.   paint.setAntiAlias(true);  
64.   canvas.drawARGB(0, 0, 0, 0);  
65.   paint.setColor(color);  
66.   canvas.drawRoundRect(rectF, roundPx, roundPx, paint);  
67.  
68.   paint.setXfermode(new PorterDuffXfermode(Mode.SRC_IN));  
69.   canvas.drawBitmap(bitmap, rect, rect, paint);  
70.  
71.   return output;  
72.}  
73.  
74./** 
75.* 获得带倒影的图片方法 
76.*/  
77.public static Bitmap createReflectionImageWithOrigin(Bitmap bitmap) {  
78.   final int reflectionGap = 4;  
79.   int width = bitmap.getWidth();  
80.   int height = bitmap.getHeight();  
81.  
82.   Matrix matrix = new Matrix();  
83.   matrix.preScale(1, -1);  
84.  
85.   Bitmap reflectionImage = Bitmap.createBitmap(bitmap, 0, height / 2, width, height / 2, matrix, false);  
86.  
87.   Bitmap bitmapWithReflection = Bitmap.createBitmap(width, (height + height / 2), Config.ARGB_8888);  
88.  
89.   Canvas canvas = new Canvas(bitmapWithReflection);  
90.   canvas.drawBitmap(bitmap, 0, 0, null);  
91.   Paint deafalutPaint = new Paint();  
92.   canvas.drawRect(0, height, width, height + reflectionGap, deafalutPaint);  
93.  
94.   canvas.drawBitmap(reflectionImage, 0, height + reflectionGap, null);  
95.  
96.   Paint paint = new Paint();  
97.   LinearGradient shader = new LinearGradient(0, bitmap.getHeight(), 0, bitmapWithReflection.getHeight() + reflectionGap, 0x70ffffff, 0x00ffffff, TileMode.CLAMP);  
98.   paint.setShader(shader);  
99.   // Set the Transfer mode to be porter duff and destination in  
100.   paint.setXfermode(new PorterDuffXfermode(Mode.DST_IN));  
101.   // Draw a rectangle using the paint with our linear gradient  
102.   canvas.drawRect(0, height, width, bitmapWithReflection.getHeight() + reflectionGap, paint);  
103.   return bitmapWithReflection;  
104.}  
105.}  
 






Java代码  
1.private byte[] Bitmap2Bytes(Bitmap bm){  
2.   ByteArrayOutputStream baos = new ByteArrayOutputStream();  
3.   bm.compress(Bitmap.CompressFormat.PNG, 100, baos);  
4.   return baos.toByteArray();  
5.}  
6.private Bitmap Bytes2Bimap(byte[] b){  
7.            if(b.length!=0){  
8.                return BitmapFactory.decodeByteArray(b, 0, b.length);  
9.            }  
10.            else {  
11.                return null;  
12.            }  
13.      }  
14.  
15. /** 
16.     * create the bitmap from a byte array 
17.     *生成水印图片 
18.     * @param src the bitmap object you want proecss 
19.     * @param watermark the water mark above the src 
20.     * @return return a bitmap object ,if paramter's length is 0,return null 
21.     */  
22.    private Bitmap createBitmap( Bitmap src, Bitmap watermark )  
23.    {  
24.        String tag = "createBitmap";  
25.        Log.d( tag, "create a new bitmap" );  
26.        if( src == null )  
27.        {  
28.            return null;  
29.        }  
30.   
31.        int w = src.getWidth();  
32.        int h = src.getHeight();  
33.        int ww = watermark.getWidth();  
34.        int wh = watermark.getHeight();  
35.        //create the new blank bitmap  
36.        Bitmap newb = Bitmap.createBitmap( w, h, Config.ARGB_8888 );//创建一个新的和SRC长度宽度一样的位图  
37.        Canvas cv = new Canvas( newb );  
38.        //draw src into  
39.        cv.drawBitmap( src, 0, 0, null );//在 0,0坐标开始画入src  
40.        //draw watermark into  
41.        cv.drawBitmap( watermark, w - ww + 5, h - wh + 5, null );//在src的右下角画入水印  
42.        //save all clip  
43.        cv.save( Canvas.ALL_SAVE_FLAG );//保存  
44.        //store  
45.        cv.restore();//存储  
46.        return newb;  
47.    }  
48.   /** 重新编码Bitmap 
49.   *  
50.   * @param src 
51.   *          需要重新编码的Bitmap 
52.   * 
53.   * @param format 
54.   *          编码后的格式(目前只支持png和jpeg这两种格式) 
55.   * 
56.   * @param quality 
57.   *          重新生成后的bitmap的质量 
58.   * 
59.   * @return 
60.   *          返回重新生成后的bitmap 
61.   */  
62. private static Bitmap codec(Bitmap src, Bitmap.CompressFormat format,  
63.                                    int quality) {  
64.            ByteArrayOutputStream os = new ByteArrayOutputStream();  
65.            src.compress(format, quality, os);              
66.  
67.            byte[] array = os.toByteArray();  
68.            return BitmapFactory.decodeByteArray(array, 0, array.length);  
69.        }  
70.  
71.//Stream转换成Byte  
72.static byte[] streamToBytes(InputStream is) {  
73.      ByteArrayOutputStream os = new ByteArrayOutputStream(1024);  
74.      byte[] buffer = new byte[1024];  
75.      int len;  
76.      try {  
77.             while ((len = is.read(buffer)) >= 0) {  
78.             os.write(buffer, 0, len);  
79.             }  
80.          } catch (java.io.IOException e) {  
81.  
82.          }  
83.          return os.toByteArray();  
84.}  
85.//把View转换成Bitmap  
86.  
87.    /** 
88.     * 把一个View的对象转换成bitmap 
89.     */  
90.    static Bitmap getViewBitmap(View v) {  
91.          
92.        v.clearFocus();  
93.        v.setPressed(false);  
94.  
95.        //能画缓存就返回false  
96.        boolean willNotCache = v.willNotCacheDrawing();  
97.        v.setWillNotCacheDrawing(false);   
98.        int color = v.getDrawingCacheBackgroundColor();  
99.        v.setDrawingCacheBackgroundColor(0);  
100.        if (color != 0) {  
101.            v.destroyDrawingCache();  
102.        }  
103.        v.buildDrawingCache();  
104.        Bitmap cacheBitmap = v.getDrawingCache();  
105.        if (cacheBitmap == null) {  
106.            Log.e(TAG, "failed getViewBitmap(" + v + ")", new RuntimeException());  
107.            return null;  
108.        }  
109.        Bitmap bitmap = Bitmap.createBitmap(cacheBitmap);  
110.        // Restore the view  
111.        v.destroyDrawingCache();  
112.        v.setWillNotCacheDrawing(willNotCache);  
113.        v.setDrawingCacheBackgroundColor(color);  
114.        return bitmap;  
115.    }  
 






Java代码  
1.读取raw资源文件中的mp3文件,然后通过音乐播放器播放:  
2.  
3.    /** 
4.     * 把mp3文件写入卡 
5.     *  
6.     * @param fileName 
7.     *             输出的文件名(全路径) 
8.     * @param context 
9.         *             context对象 
10.     */  
11.    private void writeMP3ToSDcard(String fileName, Context context) {  
12.        byte[] buffer = new byte[1024 * 8];  
13.        int read;  
14.        BufferedInputStream bin = new BufferedInputStream(context.getResources().openRawResource(R.raw.ring));  
15.        try {  
16.            BufferedOutputStream bout = new BufferedOutputStream(new FileOutputStream(fileName));  
17.            while ((read = bin.read(buffer)) > -1) {  
18.                bout.write(buffer, 0, read);  
19.            }  
20.            bout.flush();  
21.            bout.close();  
22.            bin.close();  
23.        } catch (FileNotFoundException e) {  
24.            e.printStackTrace();  
25.        } catch (IOException e) {  
26.            e.printStackTrace();  
27.        }  
28.    }  
29.  
30.  
31.Intent intent = new Intent();  
32.intent.addFlags(Intent.FLAG_ACTIVITY_NEW_TASK);  
33.intent.setAction(android.content.Intent.ACTION_VIEW);  
34.intent.setDataAndType(Uri.fromFile(newFile("XXXXmp3的文件全路径")),"audio/*");  
35.startActivity(intent);  
 


绘制图像倒影 






Java代码  
1.private void    
2._Init()     
3.{     
4.  m_paint = new Paint(Paint.ANTI_ALIAS_FLAG);     
5.  LinearGradient lg = new LinearGradient(     
6.    0, 0, 0, m_nShadowH,      
7.    0xB0FFFFFF, 0x00000000,     
8.    Shader.TileMode.CLAMP);     
9.  m_paint.setShader(lg);     
10.  m_paint.setXfermode(new PorterDuffXfermode(PorterDuff.Mode.MULTIPLY));     
11.}     
12.    
13.@Override protected void      
14.onDraw(Canvas canvas)     
15.{     
16.  super.onDraw(canvas);     
17.    
18.  int nX = 0;     
19.  int nY = 20;     
20.    
21.  _DrawNormalImg(canvas, nX, nY);     
22.  _DrawMirror(canvas, nX, nY);     
23.}      
24.    
25.private void    
26._DrawNormalImg(Canvas canvas, int nX, int nY)     
27.{     
28.  canvas.save(Canvas.MATRIX_SAVE_FLAG);     
29.  canvas.translate(nX, nY);        
30.  m_dw.draw(canvas);     
31.  canvas.restore();     
32.}     
33.    
34.private void    
35._DrawMirror(Canvas canvas, int nX, int nY)     
36.{     
37.  int nW = m_dw.getIntrinsicWidth();     
38.  int nH = m_dw.getIntrinsicHeight();     
39.    
40.  ///////////////////////////////////     
41.  //draw mirror image     
42.  canvas.save(Canvas.MATRIX_SAVE_FLAG);     
43.  canvas.scale(1.0f, -1.0f);     
44.  canvas.translate(nX, -(nY + nH * 2));     
45.  canvas.clipRect(0, nH, nW, nH - m_nShadowH);     
46.  m_dw.draw(canvas);     
47.  canvas.restore();     
48.    
49.  //////////////////////////////     
50.  //draw mask     
51.  canvas.save();     
52.  canvas.translate(nX, nY + nH);     
53.  canvas.drawRect(0, 0, nW, m_nShadowH, m_paint);     
54.  canvas.restore();     
55.}    
 
Android 繪圖座標體系預設的原點在左上角,X 軸往右是越來越大的正值,而 Y 軸往下,則是越來越大的正值。要畫出垂直翻轉的圖片,其實也就是要垂直翻轉整個繪圖座標體系。在 Android 中,要如何做?答案就是 canvas.scale(1.0f, -1.0f)。很簡單吧,沒想到給 scale() 函式一個負值,就可以翻轉相對應的軸。
 在 Photoshop 中,做鏡像特效的第二步是要對這翻轉的圖片,加個由灰到黑的漸層 mask。 
在 Android 中,要畫漸層色,那就一定得用 LinearGradient 這個類別。至於要對背景圖加上個 mask,就請參考一下 Paint 的 setXfermode() 函式。_Init() 這個函式,就是負責生成一個由灰到黑漸層 mask 的 m_paint 物件。
 




http://blog.csdn.net/Android_Tutor/archive/2010/11/02/5981753.aspx 


http://www.cnblogs.com/TerryBlog/archive/2012/01/08/2316482.html 


android常用图片特效处理 
http://www.eoeandroid.com/thread-170526-1-1.html 


相机(Camera)实时滤镜效果 
http://www.eoeandroid.com/thread-171528-1-1.html 


Android, WindowsPhone7, IOS ,vc2010平台40多套图片滤镜开源 
http://www.cnblogs.com/daizhj/archive/2012/05/15/2501406.html 


Android实现获取本机中所有图片 
http://www.cnblogs.com/hanyonglu/archive/2012/05/10/2494908.html

你可能感兴趣的:(android,图片处理,imageview)