问题描述
|
我需要四舍五入的位图。之后,我需要为其添加边框。我已经完成了下面的源代码工作,但是我不知道如何使用画布在位图中绘制边框。有什么办法吗?谢谢
Bitmap output = Bitmap.createBitmap(bitmap.getWidth(),bitmap.getHeight(),Config.ARGB_8888);
Canvas canvas = new Canvas(output);
final Paint paint = new Paint();
final Rect rect = new Rect(0,bitmap.getWidth(),bitmap.getHeight());
final RectF rectF = new RectF(rect);
paint.setAntiAlias(true);
canvas.drawARGB(0,0);
canvas.drawRoundRect(rectF,20.0f,paint);
paint.setXfermode(new PorterDuffXfermode(Mode.SRC_IN));
canvas.drawBitmap(bitmap,rect,paint);
return output;
我添加了de解决方案:
Bitmap output = Bitmap.createBitmap(bitmap.getWidth(),Config.ARGB_8888);
Canvas canvas = new Canvas(output);
Paint paint = new Paint();
Paint paintstroke = new Paint();
paintstroke.setstrokeWidth(2);
paintstroke.setStyle(Paint.Style.stroke);
paintstroke.setColor(Color.RED);
paintstroke.setAntiAlias(true);
final Rect rect = new Rect(0,0);
canvas.drawRoundRect(rectF,paint);
paint.setXfermode(new PorterDuffXfermode(Mode.SRC_IN));
canvas.drawBitmap(bitmap,paint);
canvas.drawRoundRect(rectF,round,paintstroke);
return output;
解决方法
尝试此方法并传递位图,它将返回带有角的带有边框的位图:
Bitmap rotateAndFrame(Bitmap bitmap,float angle) {
// final boolean positive = sRandom.nextFloat() >= 0.5f;
// final float angle = (ROTATION_ANGLE_MIN + sRandom.nextFloat() * ROTATION_ANGLE_EXTRA) *
// (positive ? 1.0f : -1.0f);
final double radAngle = Math.toRadians(angle);
final int bitmapWidth = bitmap.getWidth();
final int bitmapHeight = bitmap.getHeight();
final double cosAngle = Math.abs(Math.cos(radAngle));
final double sinAngle = Math.abs(Math.sin(radAngle));
final int strokedWidth = (int) (bitmapWidth + 2 * PHOTO_BORDER_WIDTH);
final int strokedHeight = (int) (bitmapHeight + 2 * PHOTO_BORDER_WIDTH);
final int width = (int) (strokedHeight * sinAngle + strokedWidth * cosAngle);
final int height = (int) (strokedWidth * sinAngle + strokedHeight * cosAngle);
final float x = (width - bitmapWidth) / 2.0f;
final float y = (height - bitmapHeight) / 2.0f;
final Bitmap decored = Bitmap.createBitmap(width,height,Bitmap.Config.ARGB_8888);
final Canvas canvas = new Canvas(decored);
canvas.rotate(angle,width / 2.0f,height / 2.0f);
canvas.drawBitmap(bitmap,x,y,sPaint);
canvas.drawRect(x,x + bitmapWidth,y + bitmapHeight,sStrokePaint);
canvas.drawText(String.valueOf(k_value),(one_piecewidth*0.84f),(one_pieceheight*0.35f),sNumPaint);
k++;
return decored;
}
希望能帮助到你...
编辑:
private static final float PHOTO_BORDER_WIDTH2 = 3.0f;
private static final float PHOTO_BORDER_WIDTH = 1.0f;
private static final int PHOTO_BORDER_COLOR2=0x00000000;
private static final int PHOTO_BORDER_COLOR = 0xffffffff;
private static final Paint sPaint = new Paint(Paint.ANTI_ALIAS_FLAG | Paint.FILTER_BITMAP_FLAG);
private static final Paint sStrokePaint = new Paint(Paint.ANTI_ALIAS_FLAG);
private static final Paint sNumPaint = new Paint(Paint.LINEAR_TEXT_FLAG);
static {
sNumPaint.setColor(Color.BLACK);
sNumPaint.setTextSize(25);
sNumPaint.setTextAlign(Align.RIGHT);
}
static {
sStrokePaint.setStrokeWidth(PHOTO_BORDER_WIDTH);
sStrokePaint.setStyle(Paint.Style.STROKE);
// sStrokePaint.measureText(\"hello\");
sStrokePaint.setColor(PHOTO_BORDER_COLOR);
}