以下是封装好的两个类,可以实现图片的切割。仅供参考和学习。 一个是ImagePiece类,此类保存了一个Bitmap对象和一个标识图片的顺序索引的int变量。 Java代码 1. import 2. public 3. 4. 5. }
android.graphics.Bitmap; class ImagePiece {
public int index = 0; public Bitmap bitmap = null;
一个是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 10. List 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. h; 20. ht; 21. itmap(bitmap, xValue, 22. eceHeight); 23. 24. 25. } 26. 27. return 28. } 29. 30.} int xValue = j * pieceWidt int yValue = i * pieceHeig piece.bitmap = Bitmap.createByValue, pieceWidth, pi pieces.add(piece); } pieces; 1、图标加灰色过滤; 2、android的图片资源默认是静态的,单实例;如果两个IM好友的头像一样,最简单的都是用的软件自带头像,有一个在线,一个离线,直接改变头像的灰度,则两个用户的头像都会变灰或者在线,答案是:Drawable.mutate()。 Java代码 1. Drawable mDrawable = context.getResources().getDrawable(R.dr awable.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, t, 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. * 透明度 Paint pain 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 2. import 3. import 4. import 5. import 6. import 7. import 8. import 9. import 10.import 11.import 12.import android.graphics.Bitmap; android.graphics.Canvas; android.graphics.LinearGradient; android.graphics.Matrix; android.graphics.Paint; android.graphics.PixelFormat; android.graphics.PorterDuffXfermode; android.graphics.Rect; android.graphics.RectF; android.graphics.Bitmap.Config; android.graphics.PorterDuff.Mode; 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, 54. canvas.restore(); 55.} m_paint); 因篇幅问题不能全部显示,请点此查看更多更全内容
Copyright © 2019- huatuowenda.com 版权所有 湘ICP备2023022495号-1
违法及侵权请联系:TEL:199 1889 7713 E-MAIL:2724546146@qq.com
本站由北京市万商天勤律师事务所王兴未律师提供法律服务