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;
?}
?
總結
以上是生活随笔為你收集整理的Android实现仿美图秀秀给图片加框的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: Android button 居中
- 下一篇: .Android项目导入时,出现的Cou