Android实现仿美图秀秀给图片加框

// 花色边框
 public Bitmap getBitmapHuaSeBianKuang(Bitmap bitmap) {
  float frameSize = 0.5f * getFrameSize(bitmap);
  Matrix matrix = new Matrix();

  // 用来做底图
  Bitmap bitmapbg = Bitmap.createBitmap(bitmap.getWidth(),
    bitmap.getHeight(), Bitmap.Config.ARGB_8888);

  // 设置底图为画布
  Canvas canvas = new Canvas(bitmapbg);
  canvas.setDrawFilter(new PaintFlagsDrawFilter(0, Paint.ANTI_ALIAS_FLAG
    | Paint.FILTER_BITMAP_FLAG));

  float scale_x = (bitmap.getWidth() - 2 * frameSize - 2) * 1f
    / (bitmap.getWidth());
  float scale_y = (bitmap.getHeight() - 2 * frameSize - 2) * 1f
    / (bitmap.getHeight());
  matrix.reset();
  matrix.postScale(scale_x, scale_y);

  // 对相片大小处理(减去边框的大小)
  bitmap = Bitmap.createBitmap(bitmap, 0, 0, bitmap.getWidth(),
    bitmap.getHeight(), matrix, true);

  Paint paint = new Paint();
  paint.setColor(Color.WHITE);
  paint.setStrokeWidth(1);
  paint.setStyle(Style.FILL);

  // 绘制底图边框
  canvas.drawRect(
    new Rect(0, 0, bitmapbg.getWidth(), bitmapbg.getHeight()),
    paint);

  // 绘制花边

  // 绘制4个边角
  // 半径
  float R = (0.8f * frameSize);
  // 先绘制四个边角
  paint.setColor(Color.YELLOW);
  // 左上角
  canvas.drawCircle(frameSize + R, frameSize, R, paint);
  canvas.drawCircle(frameSize, frameSize + R, R, paint);
  // 右上角
  canvas.drawCircle(bitmapbg.getWidth() - frameSize - R, frameSize, R,
    paint);
  canvas.drawCircle(bitmapbg.getWidth() - frameSize, frameSize + R, R,
    paint);
  paint.setColor(Color.GREEN);
  // 左下角
  canvas.drawCircle(frameSize, bitmapbg.getHeight() - frameSize - R, R,
    paint);
  canvas.drawCircle(frameSize + R, bitmapbg.getHeight() - frameSize, R,
    paint);
  // 右下角
  canvas.drawCircle(bitmapbg.getWidth() - frameSize - R,
    bitmapbg.getHeight() - frameSize, R, paint);
  canvas.drawCircle(bitmapbg.getWidth() - frameSize, bitmapbg.getHeight()
    - frameSize - R, R, paint);

  // 计算x轴上能画圆的个数
  // 2R为一个圆的宽度,设定两个圆之间预留R的距离
  int count_x = (int) ((bitmapbg.getWidth() - 2 * frameSize - 2 * 2 * R) / (2 * R));
  switch (count_x % 3) {
  case 0:
   count_x = count_x - 1;// 少绘制一个圆防止颜色冲突
   break;
  case 1:
   count_x = count_x - 2;// 少绘制两个圆防止颜色冲突
   break;
  case 2:
   break;
  }

  // 剩余空间
  float offset_x = (bitmapbg.getWidth() - 2 * frameSize - 2 * 2 * R - count_x
    * 2 * R);
  // 每两个圆之间间隔
  float margin_x = offset_x / (count_x + 1);

  // 计算y轴上能画圆的个数
  int count_y = (int) ((bitmapbg.getHeight() - 2 * frameSize - 2 * 2 * R) / (2 * R));
  switch (count_y % 3) {
  case 0:
   break;
  case 2:
   count_y = count_y - 1;// 少绘制1个圆防止颜色冲突
   break;
  case 1:
   break;
  }
  // 剩余空间
  float offset_y = (bitmapbg.getHeight() - 2 * frameSize - 2 * 2 * R - count_y
    * 2 * R);
  // 每两个圆之间间隔
  float margin_y = offset_y / (count_y + 1);

  float start_x = (frameSize + 2 * R + margin_x + R);
  float start_y = (frameSize + 2 * R + margin_y + R);

  float x = start_x;
  int index = 1;
  while (x < bitmap.getWidth()) {
   int index2 = index % 3;
   switch (index2) {
   case 0:
    paint.setColor(Color.YELLOW);
    break;
   case 1:
    paint.setColor(Color.LTGRAY);
    break;
   case 2:
    paint.setColor(Color.GREEN);
    break;
   }
   index++;
   canvas.drawCircle(x, frameSize, R, paint);

   switch (index2) {
   case 1:
    paint.setColor(Color.YELLOW);
    break;
   case 2:
    paint.setColor(Color.LTGRAY);
    break;
   case 0:
    paint.setColor(Color.GREEN);
    break;
   }
   canvas.drawCircle(x, bitmapbg.getHeight() - frameSize, R, paint);
   x += R + margin_x + R;
  }

  float y = start_y;
  int indexh = 1;
  while (y < bitmap.getHeight()) {
   int index2 = indexh % 3;
   switch (index2) {
   case 2:
    paint.setColor(Color.GREEN);
    break;
   case 0:
    paint.setColor(Color.YELLOW);
    break;
   case 1:
    paint.setColor(Color.LTGRAY);
    break;
   }
   indexh++;
   canvas.drawCircle(frameSize, y, R, paint);
   canvas.drawCircle(bitmapbg.getWidth() - frameSize, y, R, paint);
   y += R + margin_y + R;
  }

  // 绘制灰色边框
  paint.setColor(Color.GRAY);
  canvas.drawRect(
    new Rect((int) (frameSize), (int) (frameSize), bitmapbg
      .getWidth() - (int) (frameSize), bitmapbg.getHeight()
      - (int) (frameSize)), paint);

  canvas.drawBitmap(bitmap, frameSize + 1, frameSize + 1, paint);

  return bitmapbg;
 }

 

  • 1
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 1
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值