0

我需要绕过 a 的角Bitmap。之后,我需要为它添加一个边框。我已经完成了下面的源来圆角,但我不知道如何在Bitmapusing中绘制边框Canvas。有什么办法吗?谢谢

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, 0, bitmap.getWidth(), bitmap.getHeight());
final RectF rectF = new RectF(rect);
    
paint.setAntiAlias(true);
canvas.drawARGB(0, 0, 0, 0);
canvas.drawRoundRect(rectF, 20.0f, 20.0f, paint);
    
paint.setXfermode(new PorterDuffXfermode(Mode.SRC_IN));
canvas.drawBitmap(bitmap, rect, rect, paint);
    
return output;

我已经添加了解决方案:

Bitmap output = Bitmap.createBitmap(bitmap.getWidth(), bitmap.getHeight(), 
    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, bitmap.getWidth(), bitmap.getHeight());
final RectF rectF = new RectF(rect);
    
paint.setAntiAlias(true);
canvas.drawARGB(0, 0, 0, 0);
            
canvas.drawRoundRect(rectF, 20.0f, 20.0f, paint);
paint.setXfermode(new PorterDuffXfermode(Mode.SRC_IN));
canvas.drawBitmap(bitmap, rect, rect, paint);
canvas.drawRoundRect(rectF, round, round, paintStroke);
    
return output;
4

1 回答 1

2

试试这个方法并传递位图,它将返回带角度的位图:

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, y, 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);
}
于 2011-05-31T10:19:14.433 回答