android图片处理

  1. int height = bitmap.getHeight();

  2. int pieceWidth = width / 3;

  3. int pieceHeight = height / 3;

  4. for (int i = 0; i < yPiece; i++) {

  5. for (int j = 0; j < xPiece; j++) {

  6. ImagePiece piece = new ImagePiece();

  7. piece.index = j + i * xPiece;

  8. int xValue = j * pieceWidth;

  9. int yValue = i * pieceHeight;

  10. piece.bitmap = Bitmap.createBitmap(bitmap, xValue, yValue,

  11. pieceWidth, pieceHeight);

  12. pieces.add(piece);

  13. }

  14. }

  15. return pieces;

  16. }

  17. }

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 © 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. package com.android.launcher;

  17. import android.graphics.drawable.BitmapDrawable;

  18. import android.graphics.drawable.Drawable;

  19. import android.graphics.drawable.PaintDrawable;

  20. import android.graphics.Bitmap;

  21. import android.graphics.PixelFormat;

  22. import android.graphics.Canvas;

  23. import android.graphics.PaintFlagsDrawFilter;

  24. import android.graphics.Paint;

  25. import android.graphics.Rect;

  26. import android.content.res.Resources;

  27. import android.content.Context;

  28. /**

  29. * Various utilities shared amongst the Launcher’s classes.

  30. */

  31. final class Utilities {

  32. private static int sIconWidth = -1;

  33. private static int sIconHeight = -1;

  34. private static final Paint sPaint = new Paint();

  35. private static final Rect sBounds = new Rect();

  36. private static final Rect sOldBounds = new Rect();

  37. private static Canvas sCanvas = new Canvas();

  38. static {

  39. sCanvas.setDrawFilter(new PaintFlagsDrawFilter(Paint.DITHER_FLAG,

  40. Paint.FILTER_BITMAP_FLAG));

  41. }

  42. /**

  43. * Returns a Drawable representing the thumbnail of the specified Drawable.

  44. * The size of the thumbnail is defined by the dimension

  45. * android.R.dimen.launcher_application_icon_size.

  46. *

  47. * This method is not thread-safe and should be invoked on the UI thread only.

  48. *

  49. * @param icon The icon to get a thumbnail of.

  50. * @param context The application’s context.

  51. *

  52. * @return A thumbnail for the specified icon or the icon itself if the

  53. *         thumbnail could not be created.

  54. */

  55. static Drawable createIconThumbnail(Drawable icon, Context context) {

  56. if (sIconWidth == -1) {

  57. final Resources resources = context.getResources();

  58. sIconWidth = sIconHeight = (int) resources.getDimension(android.R.dimen.app_icon_size);

  59. }

  60. int width = sIconWidth;

  61. int height = sIconHeight;

  62. float scale = 1.0f;

  63. if (icon instanceof PaintDrawable) {

  64. PaintDrawable painter = (PaintDrawable) icon;

  65. painter.setIntrinsicWidth(width);

  66. painter.setIntrinsicHeight(height);

  67. } else if (icon instanceof BitmapDrawable) {

  68. // Ensure the bitmap has a density.

  69. BitmapDrawable bitmapDrawable = (BitmapDrawable) icon;

  70. Bitmap bitmap = bitmapDrawable.getBitmap();

  71. if (bitmap.getDensity() == Bitmap.DENSITY_NONE) {

  72. bitmapDrawable.setTargetDensity(context.getResources().getDisplayMetrics());

  73. }

  74. }

  75. int iconWidth = icon.getIntrinsicWidth();

  76. int iconHeight = icon.getIntrinsicHeight();

  77. if (width > 0 && height > 0) {

  78. if (width < iconWidth || height < iconHeight || scale != 1.0f) {

  79. final float ratio = (float) iconWidth / iconHeight;

  80. if (iconWidth > iconHeight) {

  81. height = (int) (width / ratio);

  82. } else if (iconHeight > iconWidth) {

  83. width = (int) (height * ratio);

  84. }

  85. final Bitmap.Config c = icon.getOpacity() != PixelFormat.OPAQUE ?

  86. Bitmap.Config.ARGB_8888 : Bitmap.Config.RGB_565;

  87. final Bitmap thumb = Bitmap.createBitmap(sIconWidth, sIconHeight, c);

  88. final Canvas canvas = sCanvas;

  89. canvas.setBitmap(thumb);

  90. // Copy the old bounds to restore them later

  91. // If we were to do oldBounds = icon.getBounds(),

  92. // the call to setBounds() that follows would

  93. // change the same instance and we would lose the

  94. // old bounds

  95. sOldBounds.set(icon.getBounds());

  96. final int x = (sIconWidth - width) / 2;

  97. final int y = (sIconHeight - height) / 2;

  98. icon.setBounds(x, y, x + width, y + height);

  99. icon.draw(canvas);

  100. icon.setBounds(sOldBounds);

  101. icon = new FastBitmapDrawable(thumb);

  102. } else if (iconWidth < width && iconHeight < height) {

  103. final Bitmap.Config c = Bitmap.Config.ARGB_8888;

  104. final Bitmap thumb = Bitmap.createBitmap(sIconWidth, sIconHeight, c);

  105. final Canvas canvas = sCanvas;

  106. canvas.setBitmap(thumb);

  107. sOldBounds.set(icon.getBounds());

  108. final int x = (width - iconWidth) / 2;

  109. final int y = (height - iconHeight) / 2;

  110. icon.setBounds(x, y, x + iconWidth, y + iconHeight);

  111. icon.draw(canvas);

  112. icon.setBounds(sOldBounds);

  113. icon = new FastBitmapDrawable(thumb);

  114. }

  115. }

  116. return icon;

  117. }

  118. /**

  119. * Returns a Bitmap representing the thumbnail of the specified Bitmap.

  120. * The size of the thumbnail is defined by the dimension

  121. * android.R.dimen.launcher_application_icon_size.

  122. *

  123. * This method is not thread-safe and should be invoked on the UI thread only.

  124. *

  125. * @param bitmap The bitmap to get a thumbnail of.

  126. * @param context The application’s context.

  127. *

  128. * @return A thumbnail for the specified bitmap or the bitmap itself if the

  129. *         thumbnail could not be created.

  130. */

  131. static Bitmap createBitmapThumbnail(Bitmap bitmap, Context context) {

  132. if (sIconWidth == -1) {

  133. final Resources resources = context.getResources();

  134. sIconWidth = sIconHeight = (int) resources.getDimension(

  135. android.R.dimen.app_icon_size);

  136. }

  137. int width = sIconWidth;

  138. int height = sIconHeight;

  139. final int bitmapWidth = bitmap.getWidth();

  140. final int bitmapHeight = bitmap.getHeight();

  141. if (width > 0 && height > 0) {

  142. if (width < bitmapWidth || height < bitmapHeight) {

  143. final float ratio = (float) bitmapWidth / bitmapHeight;

  144. if (bitmapWidth > bitmapHeight) {

  145. height = (int) (width / ratio);

  146. } else if (bitmapHeight > bitmapWidth) {

  147. width = (int) (height * ratio);

  148. }

  149. final Bitmap.Config c = (width == sIconWidth && height == sIconHeight) ?

  150. bitmap.getConfig() : Bitmap.Config.ARGB_8888;

  151. final Bitmap thumb = Bitmap.createBitmap(sIconWidth, sIconHeight, c);

  152. final Canvas canvas = sCanvas;

  153. final Paint paint = sPaint;

  154. canvas.setBitmap(thumb);

  155. paint.setDither(false);

  156. paint.setFilterBitmap(true);

  157. sBounds.set((sIconWidth - width) / 2, (sIconHeight - height) / 2, width, height);

  158. sOldBounds.set(0, 0, bitmapWidth, bitmapHeight);

  159. canvas.drawBitmap(bitmap, sOldBounds, sBounds, paint);

  160. return thumb;

  161. } else if (bitmapWidth < width || bitmapHeight < height) {

  162. final Bitmap.Config c = Bitmap.Config.ARGB_8888;

  163. final Bitmap thumb = Bitmap.createBitmap(sIconWidth, sIconHeight, c);

  164. final Canvas canvas = sCanvas;

  165. final Paint paint = sPaint;

  166. canvas.setBitmap(thumb);

  167. paint.setDither(false);

  168. paint.setFilterBitmap(true);

  169. canvas.drawBitmap(bitmap, (sIconWidth - bitmapWidth) / 2,

  170. (sIconHeight - bitmapHeight) / 2, paint);

  171. return thumb;

  172. }

  173. }

  174. return bitmap;

  175. }

  176. }

Java代码   收藏代码

  1. //Android Matrix类实现镜像方法

  2. public void drawRegion(Image image_src,

  3. int x_src, int y_src,

  4. int width, int height,

  5. int transform,

  6. int x_dest, int y_dest,

  7. int anchor){

  8. if((anchor&VCENTER) != 0){

  9. y_dest -= height/2;

  10. }else if((anchor&BOTTOM) != 0){

  11. y_dest -= height;

  12. }

  13. if((anchor&RIGHT) != 0){

  14. x_dest -= width;

  15. }else if((anchor&HCENTER) != 0){

  16. x_dest -= width/2;

  17. }

  18. Bitmap newMap = Bitmap.createBitmap(image_src.getBitmap(), x_src, y_src, width, height);

  19. Matrix mMatrix = new Matrix();

  20. Matrix temp = new Matrix();

  21. Matrix temp2 = new Matrix();

  22. float[] mirrorY = {

  23. -1, 0, 0,

  24. 0, 1, 0,

  25. 0, 0, 1

  26. };

  27. temp.setValues(mirrorY);

  28. switch(transform){

  29. case Sprite.TRANS_NONE:

  30. break;

  31. case Sprite.TRANS_ROT90:

  32. mMatrix.setRotate(90,width/2, height/2);

  33. break;

  34. case Sprite.TRANS_ROT180:

  35. mMatrix.setRotate(180,width/2, height/2);

  36. break;

  37. case Sprite.TRANS_ROT270:

  38. mMatrix.setRotate(270,width/2, height/2);

  39. break;

  40. case Sprite.TRANS_MIRROR:

  41. mMatrix.postConcat(temp);

  42. break;

  43. case Sprite.TRANS_MIRROR_ROT90:

  44. mMatrix.postConcat(temp);

  45. mMatrix.setRotate(90,width/2, height/2);

  46. break;

  47. case Sprite.TRANS_MIRROR_ROT180:

  48. mMatrix.postConcat(temp);

  49. mMatrix.setRotate(180,width/2, height/2);

  50. break;

  51. case Sprite.TRANS_MIRROR_ROT270:

  52. mMatrix.postConcat(temp);

  53. mMatrix.setRotate(270,width/2, height/2);

  54. break;

  55. }

  56. mMatrix.setTranslate(x_dest, y_dest);

  57. canvas.drawBitmap(newMap, mMatrix, mPaint);

  58. }

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. return bitmap;

  24. }

  25. //通过传入位图,新的宽.高比进行位图的缩放操作

  26. public static Drawable resizeImage(Bitmap bitmap, int w, int h) {

  27. // load the origial Bitmap

  28. Bitmap BitmapOrg = bitmap;

  29. int width = BitmapOrg.getWidth();

  30. int height = BitmapOrg.getHeight();

  31. int newWidth = w;

  32. int newHeight = h;

  33. Log.v(tag, String.valueOf(width));

  34. Log.v(tag, String.valueOf(height));

  35. Log.v(tag, String.valueOf(newWidth));

  36. Log.v(tag, String.valueOf(newHeight));

  37. // calculate the scale

  38. float scaleWidth = ((float) newWidth) / width;

  39. float scaleHeight = ((float) newHeight) / height;

  40. // create a matrix for the manipulation

  41. Matrix matrix = new Matrix();

  42. // resize the Bitmap

  43. matrix.postScale(scaleWidth, scaleHeight);

  44. // if you want to rotate the Bitmap

  45. // matrix.postRotate(45);

  46. // recreate the new Bitmap

  47. Bitmap resizedBitmap = Bitmap.createBitmap(BitmapOrg, 0, 0, width,

  48. height, matrix, true);

  49. // make a Drawable from Bitmap to allow to set the Bitmap

  50. // to the ImageView, ImageButton or what ever

  51. return new BitmapDrawable(resizedBitmap);

  52. }

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, 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(), 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 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. public static Bitmap zoomBitmap(Bitmap bitmap, int w, int h) {

  25. int width = bitmap.getWidth();

  26. int height = bitmap.getHeight();

  27. Matrix matrix = new Matrix();

  28. float scaleWidht = ((float) w / width);

  29. float scaleHeight = ((float) h / height);

  30. matrix.postScale(scaleWidht, scaleHeight);

  31. Bitmap newbmp = Bitmap.createBitmap(bitmap, 0, 0, width, height, matrix, true);

  32. return newbmp;

  33. }

  34. /**

  35. * 将Drawable转化为Bitmap

  36. */

  37. public static Bitmap drawableToBitmap(Drawable drawable) {

  38. int width = drawable.getIntrinsicWidth();

  39. int height = drawable.getIntrinsicHeight();

  40. Bitmap bitmap = Bitmap.createBitmap(width, height, drawable.getOpacity() != PixelFormat.OPAQUE ? Bitmap.Config.ARGB_8888 : Bitmap.Config.RGB_565);

  41. Canvas canvas = new Canvas(bitmap);

  42. drawable.setBounds(0, 0, width, height);

  43. drawable.draw(canvas);

  44. return bitmap;

  45. }

  46. /**

  47. * 获得圆角图片的方法

  48. */

  49. public static Bitmap getRoundedCornerBitmap(Bitmap bitmap, float roundPx) {

  50. Bitmap output = Bitmap.createBitmap(bitmap.getWidth(), bitmap.getHeight(), Config.ARGB_8888);

  51. Canvas canvas = new Canvas(output);

  52. final int color = 0xff424242;

  53. final Paint paint = new Paint();

  54. final Rect rect = new Rect(0, 0, bitmap.getWidth(), bitmap.getHeight());

  55. final RectF rectF = new RectF(rect);

  56. paint.setAntiAlias(true);

  57. canvas.drawARGB(0, 0, 0, 0);

  58. paint.setColor(color);

  59. canvas.drawRoundRect(rectF, roundPx, roundPx, paint);

  60. paint.setXfermode(new PorterDuffXfermode(Mode.SRC_IN));

  61. canvas.drawBitmap(bitmap, rect, rect, paint);

  62. return output;

  63. }

  64. /**

  65. * 获得带倒影的图片方法

  66. */

  67. public static Bitmap createReflectionImageWithOrigin(Bitmap bitmap) {

  68. final int reflectionGap = 4;

  69. int width = bitmap.getWidth();

  70. int height = bitmap.getHeight();

  71. Matrix matrix = new Matrix();

  72. matrix.preScale(1, -1);

  73. Bitmap reflectionImage = Bitmap.createBitmap(bitmap, 0, height / 2, width, height / 2, matrix, false);

  74. Bitmap bitmapWithReflection = Bitmap.createBitmap(width, (height + height / 2), Config.ARGB_8888);

  75. Canvas canvas = new Canvas(bitmapWithReflection);

  76. canvas.drawBitmap(bitmap, 0, 0, null);

  77. Paint deafalutPaint = new Paint();

  78. canvas.drawRect(0, height, width, height + reflectionGap, deafalutPaint);

  79. canvas.drawBitmap(reflectionImage, 0, height + reflectionGap, null);

ctF(rect);

  1. paint.setAntiAlias(true);

  2. canvas.drawARGB(0, 0, 0, 0);

  3. paint.setColor(color);

  4. canvas.drawRoundRect(rectF, roundPx, roundPx, paint);

  5. paint.setXfermode(new PorterDuffXfermode(Mode.SRC_IN));

  6. canvas.drawBitmap(bitmap, rect, rect, paint);

  7. return output;

  8. }

  9. /**

  10. * 获得带倒影的图片方法

  11. */

  12. public static Bitmap createReflectionImageWithOrigin(Bitmap bitmap) {

  13. final int reflectionGap = 4;

  14. int width = bitmap.getWidth();

  15. int height = bitmap.getHeight();

  16. Matrix matrix = new Matrix();

  17. matrix.preScale(1, -1);

  18. Bitmap reflectionImage = Bitmap.createBitmap(bitmap, 0, height / 2, width, height / 2, matrix, false);

  19. Bitmap bitmapWithReflection = Bitmap.createBitmap(width, (height + height / 2), Config.ARGB_8888);

  20. Canvas canvas = new Canvas(bitmapWithReflection);

  21. canvas.drawBitmap(bitmap, 0, 0, null);

  22. Paint deafalutPaint = new Paint();

  23. canvas.drawRect(0, height, width, height + reflectionGap, deafalutPaint);

  24. canvas.drawBitmap(reflectionImage, 0, height + reflectionGap, null);

  • 17
    点赞
  • 13
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值