0
点赞
收藏
分享

微信扫一扫

android图片处理方法

蓝哆啦呀 2023-04-30 阅读 108


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

 

android图片处理方法_Java

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. }

    举报

    相关推荐

    0 条评论