您好,欢迎来到花图问答。
搜索
您的当前位置:首页android图片处理方法

android图片处理方法

来源:花图问答
将一个图片切割成多个图片 有种场景,我们想将一个图片切割成多个图片。比如我们在开发一个拼图的游戏,就首先要对图片进行切割。

以下是封装好的两个类,可以实现图片的切割。仅供参考和学习。 一个是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 split(Bitmap bitmap, int xPiece, int yPiece) { 9.

10. List pieces = new ArrayList(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. 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

本站由北京市万商天勤律师事务所王兴未律师提供法律服务