微信公众号搜"智元新知"关注
微信扫一扫可直接关注哦!

如何使用画布在位图中绘制笔触?

如何解决如何使用画布在位图中绘制笔触?

| 我需要四舍五入的位图。之后,我需要为其添加边框。我已经完成了下面的源代码工作,但是我不知道如何使用画布在位图中绘制边框。有什么办法吗?谢谢
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);

 }
    

版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。