// 花色边框
 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;
 }

Android实现仿美图秀秀给图片加框相关推荐

  1. 仿美图秀秀的图片剪切

    先贴上美图秀秀原作的效果图,右边是我仿的效果图. 刚一眼打量过去,吸引我们的就是那四个大点.就从它开始吧,目前看来这个大点是一个图片,当点击下去的时候有加亮的效果,可能这又是一张图片.我们先不要考虑这 ...

  2. Android -- 小功能 仿美图秀秀(美颜相机)马赛克功能

    前言: 之前公司有需求,需要对图片进行编辑,功能参照美图秀秀(或者美颜相机)的功能(带手指触动预览图功能.带放大缩小实施涂鸦功能),上网找了一堆源码,发现没有类似的,只能自己写 实现思路: 见源码,下 ...

  3. Android 反编译美图秀秀APK,开发自己的美颜apk

    1.下载美图秀秀apk,使用反编译软件"Android逆向助手"提取里面的jni.java文件到我们的工程里 package com.mt.mtxx.image;public cl ...

  4. 美图秀秀-美化图片之【特效】界面设计

    本文是特效界面设计,在美图秀秀的特效模块主要是实现图片添加滤镜效果,界面挺炫的. 界面包含黑边和虚化按钮,4种类型的滤镜,每种类型又包含许多具体滤镜效果,当我们点击时候开始处理图片 1.加载图片 se ...

  5. 美图秀秀美化图片之【智能优化】模块界面设计

    美图秀秀的智能优化界面十分简单明了,它只包含了一张要进行处理的图片和一个bar,再就是取消操作和保存操作的2个按钮,先附一张界面图 一.点击美化图片首页[智能优化],进入具体操作界面 FWFuncti ...

  6. 美图秀秀-美化图片之【背景虚化】界面设计

    本文是背景虚化界面设计,在美图秀秀的背景虚化模块主要是图像的模糊处理,可以按照圆形和线性进行模糊处理,并生成选定的形状. 在开发中遇到的误区 1.模糊形状使用UIImageView,遇到一些麻烦,即使 ...

  7. canvas节点无法导出图片_开源小程序,练手必备,仿“美图秀秀”处理图片。

    微信小程序:图片裁剪.缩放.涂鸦.添加文字.拼长图.拼相框.表情包制作.便捷的图片编辑工具. 图片编辑小程序--HiPhoto 全能.便捷的图片编辑工具.实现了图片裁剪.添加文字.涂鸦.拼长图.拼相框 ...

  8. android Studio 编写美图秀秀的简单demo

      借鉴在慕客网上的学习,给大家分享一下.目前在自学之中,没什么编程背景,JAVA也在自学之中.希望志同道合的朋友能留个言,大家一起交流. 首先在主界面创建了3个按钮,这三个按钮分别是通过不同的机理来 ...

  9. 美图秀秀美化图片之【边框】界面设计【重大更新】

    在进行写边框前,需要通知大家一声,整个美化图片的界面开发已经完全重写,请大家先下载最新的项目[点击下载] 效果图 在前面的开发方法中由于没有考虑许多因素,造成viewcontroller代码混乱,所以 ...

最新文章

  1. 北航与西安交大计算机专业对比,北航和西安交大,谁的工科实力更强,该上哪一所大学呢?...
  2. 做事先做人 --- 我的十三条军规
  3. NTP时间服务器简介
  4. 招财铃:即时通信整合,
  5. php5.4与php5.2,升级php 5.2.14 到5.4.11版本报错问题
  6. sicp第一章部分习题解答
  7. 什么是自然语言处理,它如何工作?
  8. 字典和键值对换输出_Python知识小结—字典
  9. 一个32岁入门的70后程序员给我的启示
  10. idm下载器怎么下载网页视频?如何用idm自动下载网站文件?
  11. java promise实现,[Java教程]promise的理解和应用
  12. Error opening device
  13. 【kimol君的无聊小发明】—用python写论文下载器
  14. linux创建删除用户及vim简单操作
  15. 结构体 5.火星人足球赛
  16. Linux内核5.10编译 与调试
  17. VIC水文模型在windows环境下运行
  18. 功率曲线k值_功率曲线的修正
  19. 上海银行公积金查询需求
  20. 详解 python 中 numpy 函数 —— zeros()

热门文章

  1. spring 事务-使用@Transactional 注解(事务隔离级别)
  2. 通过trace跟踪系统调用
  3. 一行代码修改MarkdownPad2在Win10下实时预览字体太小
  4. 51nod百度之星2016练习赛
  5. libSVM在matlab下的使用安装
  6. 应用程序框架实战三十六:CRUD实战演练介绍
  7. 后缀树的构造方法-Ukkonen详解 [转]
  8. sencha touch下,害人不浅的“*”号命名空间引入
  9. 要学DOT NET了
  10. 算法竞赛进阶指南第一章--题解