如何使用画布在Bitmap中绘制笔划?

时间:2011-05-31 10:09:49

标签: android canvas

我需要绕过Bitmap的角落。之后,我需要为它添加边框。我已经完成了下面的源代码来绕过角落,但我不知道如何使用画布在Bitmap中绘制边框。有什么办法吗?感谢

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;

1 个答案:

答案 0 :(得分:1)

尝试此方法并传递位图,它将返回带有角度边框的位图:

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);

 }