• android图片处理方法(转)


    将一个图片切割成多个图片 
    有种场景,我们想将一个图片切割成多个图片。比如我们在开发一个拼图的游戏,就首先要对图片进行切割。 
    以下是封装好的两个类,可以实现图片的切割。仅供参考和学习。 
    一个是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(00, 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. -100,  
    45. 010,  
    46. 001  
    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, 00, 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, 00, 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(), 00,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, 00, 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, 00, 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(00, 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(00, bitmap.getWidth(), bitmap.getHeight());  
    61.    final RectF rectF = new RectF(rect);  
    62.   
    63.    paint.setAntiAlias(true);  
    64.    canvas.drawARGB(0000);  
    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, 00null);  
    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, 0x70ffffff0x00ffffff, 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, 00null );//在 0,0坐标开始画入src  
    40.         //draw watermark into  
    41.         cv.drawBitmap( watermark, w - ww + 5, h - wh + 5null );//在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.     000, m_nShadowH,      
    7.     0xB0FFFFFF0x00000000,     
    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(00, 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

  • 相关阅读:
    用C#实现在线升级
    wordwrap,wordbreak,whitespace,textoverflow的区别和用法[转]
    Sql Server 存储过程分页大全(2005,2000)
    C#中生成中文繁体web页面
    如何在c#里执行sql server DTS包
    asp.net采集函数(采集、分析、替换、入库)
    css定义一个导航栏
    mssql与access的sql语法差异
    [转]sql server数据库定时自动备份
    HttpHandler与图片盗链
  • 原文地址:https://www.cnblogs.com/shortboy/p/2726556.html
Copyright © 2020-2023  润新知