Android仿美图秀秀给图片加框

转于: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仿美图秀秀给图片加框—1

猜你喜欢

转载自yuemeiqing2008-163-com.iteye.com/blog/2136244