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

1. importandroid.graphics.Bitmap;   
2. publicclassImagePiece {     
3.    publicintindex = 0;          
4.    publicBitmap bitmap = null;    
5. } 
 
 一个是ImageSplitter类,有一个静态方法split,传入的参数是要切割的Bitmap对象,和横向和竖向的切割片数。比如传入的是3、3,则横竖向都切割成3片,最终会将整个图片切割成3X3=9片。 
 
    
  
1. importjava.util.ArrayList;    
2. importjava.util.List;    
3.    
4. importandroid.graphics.Bitmap;    
5.    
6. publicclassImageSplitter {    
7.    
8.    publicstaticList<ImagePiece> split(Bitmap bitmap, intxPiece, intyPiece) {    
9.    
10.        List<ImagePiece> pieces = newArrayList<ImagePiece>(xPiece * yPiece);    
11.        intwidth = bitmap.getWidth();    
12.        intheight = bitmap.getHeight();    
13.        intpieceWidth = width / 3;    
14.        intpieceHeight = height / 3;    
15.        for(inti = 0; i < yPiece; i++) {    
16.            for(intj = 0; j < xPiece; j++) {    
17.                ImagePiece piece = newImagePiece();    
18.                piece.index = j + i * xPiece;    
19.                intxValue = j * pieceWidth;    
20.                intyValue = i * pieceHeight;    
21.                piece.bitmap = Bitmap.createBitmap(bitmap, xValue, yValue,    
22.                        pieceWidth, pieceHeight);    
23.                pieces.add(piece);    
24.            }    
25.        }    
26.    
27.        returnpieces;    
28.    }    
29.    
30. }
 
1、图标加灰色过滤; 
 
 2、android的图片资源默认是静态的,单实例;如果两个IM好友的头像一样,最简单的都是用的软件自带头像,有一个在线,一个离线,直接改变头像的灰度,则两个用户的头像都会变灰或者在线,答案是:Drawable.mutate()。 
 
 
  
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 = newColorMatrix();    
6. cm.setSaturation(0);    
7. ColorMatrixColorFilter cf = newColorMatrixColorFilter(cm);    
8. mDrawable.setColorFilter(cf); 
 
生成缩略图,抠自android launcher源码: 
 
    
  
1.  
2.  
3. packagecom.android.launcher;  
4.  
5. importandroid.graphics.drawable.BitmapDrawable;  
6. importandroid.graphics.drawable.Drawable;  
7. importandroid.graphics.drawable.PaintDrawable;  
8. importandroid.graphics.Bitmap;  
9. importandroid.graphics.PixelFormat;  
10. importandroid.graphics.Canvas;  
11. importandroid.graphics.PaintFlagsDrawFilter;  
12. importandroid.graphics.Paint;  
13. importandroid.graphics.Rect;  
14. importandroid.content.res.Resources;  
15. importandroid.content.Context;  
16.  
17.  
18. finalclassUtilities {  
19.    privatestaticintsIconWidth = -1;  
20.    privatestaticintsIconHeight = -1;  
21.  
22.    privatestaticfinalPaint sPaint = newPaint();  
23.    privatestaticfinalRect sBounds = newRect();  
24.    privatestaticfinalRect sOldBounds = newRect();  
25.    privatestaticCanvas sCanvas = newCanvas();  
26.  
27.    static{  
28.        sCanvas.setDrawFilter(newPaintFlagsDrawFilter(Paint.DITHER_FLAG,  
29.                Paint.FILTER_BITMAP_FLAG));  
30.    }  
31.  
32.     
33.    staticDrawable createIconThumbnail(Drawable icon, Context context) {  
34.        if(sIconWidth == -1) {  
35.            finalResources resources = context.getResources();  
36.            sIconWidth = sIconHeight = (int) resources.getDimension(android.R.dimen.app_icon_size);  
37.        }  
38.  
39.        intwidth = sIconWidth;  
40.        intheight = sIconHeight;  
41.  
42.        floatscale = 1.0f;  
43.        if(icon instanceofPaintDrawable) {  
44.            PaintDrawable painter = (PaintDrawable) icon;  
45.            painter.setIntrinsicWidth(width);  
46.            painter.setIntrinsicHeight(height);  
47.        } elseif(icon instanceofBitmapDrawable) {  
48.            // Ensure the bitmap has a density. 
49.            BitmapDrawable bitmapDrawable = (BitmapDrawable) icon;  
50.            Bitmap bitmap = bitmapDrawable.getBitmap();  
51.            if(bitmap.getDensity() == Bitmap.DENSITY_NONE) {  
52.                bitmapDrawable.setTargetDensity(context.getResources().getDisplayMetrics());  
53.            }  
54.        }  
55.        inticonWidth = icon.getIntrinsicWidth();  
56.        inticonHeight = icon.getIntrinsicHeight();  
57.  
58.        if(width > 0&& height > 0) {  
59.            if(width < iconWidth || height < iconHeight || scale != 1.0f) {  
60.                finalfloatratio = (float) iconWidth / iconHeight;  
61.  
62.                if(iconWidth > iconHeight) {  
63.                    height = (int) (width / ratio);  
64.                } elseif(iconHeight > iconWidth) {  
65.                    width = (int) (height * ratio);  
66.                }  
67.  
68.                finalBitmap.Config c = icon.getOpacity() != PixelFormat.OPAQUE ?  
69.                            Bitmap.Config.ARGB_8888 : Bitmap.Config.RGB_565;  
70.                finalBitmap thumb = Bitmap.createBitmap(sIconWidth, sIconHeight, c);  
71.                finalCanvas canvas = sCanvas;  
72.                canvas.setBitmap(thumb);  
73.                // Copy the old bounds to restore them later 
74.                // If we were to do oldBounds = icon.getBounds(), 
75.                // the call to setBounds() that follows would 
76.                // change the same instance and we would lose the 
77.                // old bounds 
78.                sOldBounds.set(icon.getBounds());  
79.                finalintx = (sIconWidth - width) / 2;  
80.                finalinty = (sIconHeight - height) / 2;  
81.                icon.setBounds(x, y, x + width, y + height);  
82.                icon.draw(canvas);  
83.                icon.setBounds(sOldBounds);  
84.                icon = newFastBitmapDrawable(thumb);  
85.            } elseif(iconWidth < width && iconHeight < height) {  
86.                finalBitmap.Config c = Bitmap.Config.ARGB_8888;  
87.                finalBitmap thumb = Bitmap.createBitmap(sIconWidth, sIconHeight, c);  
88.                finalCanvas canvas = sCanvas;  
89.                canvas.setBitmap(thumb);  
90.                sOldBounds.set(icon.getBounds());  
91.                finalintx = (width - iconWidth) / 2;  
92.                finalinty = (height - iconHeight) / 2;  
93.                icon.setBounds(x, y, x + iconWidth, y + iconHeight);  
94.                icon.draw(canvas);  
95.                icon.setBounds(sOldBounds);  
96.                icon = newFastBitmapDrawable(thumb);  
97.            }  
98.        }  
99.  
100.        returnicon;  
101.    }  
102.  
103.     
104.    staticBitmap createBitmapThumbnail(Bitmap bitmap, Context context) {  
105.        if(sIconWidth == -1) {  
106.            finalResources resources = context.getResources();  
107.            sIconWidth = sIconHeight = (int) resources.getDimension(  
108.                    android.R.dimen.app_icon_size);  
109.        }  
110.  
111.        intwidth = sIconWidth;  
112.        intheight = sIconHeight;  
113.  
114.        finalintbitmapWidth = bitmap.getWidth();  
115.        finalintbitmapHeight = bitmap.getHeight();  
116.  
117.        if(width > 0&& height > 0) {  
118.            if(width < bitmapWidth || height < bitmapHeight) {  
119.                finalfloatratio = (float) bitmapWidth / bitmapHeight;  
120.      
121.                if(bitmapWidth > bitmapHeight) {  
122.                    height = (int) (width / ratio);  
123.                } elseif(bitmapHeight > bitmapWidth) {  
124.                    width = (int) (height * ratio);  
125.                }  
126.      
127.                finalBitmap.Config c = (width == sIconWidth && height == sIconHeight) ?  
128.                        bitmap.getConfig() : Bitmap.Config.ARGB_8888;  
129.                finalBitmap thumb = Bitmap.createBitmap(sIconWidth, sIconHeight, c);  
130.                finalCanvas canvas = sCanvas;  
131.                finalPaint paint = sPaint;  
132.                canvas.setBitmap(thumb);  
133.                paint.setDither(false);  
134.                paint.setFilterBitmap(true);  
135.                sBounds.set((sIconWidth - width) / 2, (sIconHeight - height) / 2, width, height);  
136.                sOldBounds.set(0, 0, bitmapWidth, bitmapHeight);  
137.                canvas.drawBitmap(bitmap, sOldBounds, sBounds, paint);  
138.                returnthumb;  
139.            } elseif(bitmapWidth < width || bitmapHeight < height) {  
140.                finalBitmap.Config c = Bitmap.Config.ARGB_8888;  
141.                finalBitmap thumb = Bitmap.createBitmap(sIconWidth, sIconHeight, c);  
142.                finalCanvas canvas = sCanvas;  
143.                finalPaint paint = sPaint;  
144.                canvas.setBitmap(thumb);  
145.                paint.setDither(false);  
146.                paint.setFilterBitmap(true);  
147.                canvas.drawBitmap(bitmap, (sIconWidth - bitmapWidth) / 2,  
148.                        (sIconHeight - bitmapHeight) / 2, paint);  
149.                returnthumb;  
150.            }  
151.        }  
152.  
153.        returnbitmap;  
154.    }  
155. }









