Android仿美图秀秀给图片加框
16lz
2021-12-04
转于:http://blog.sina.com.cn/s/blog_957d483a010189ft.html
--------------------------------------------------------------------------------------
// 花色边框 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(安卓)view 的cache
- Android实现圆角照片和圆形照片
- 高德地图Android,绘制自定义定位蓝点、marker、面
- Android(安卓)技术博客(3):android 悬浮窗菜单,可用于显示在 launche
- android使用shape设置下边框
- android中opengl es基本方法使用说明
- 程序员也是会浪漫的->打造浪漫的Android表白程序
- Android--边距(margin)与内边距(padding)
- 怎么给Android(安卓)控件添加边框(样式)?