2011-05-31 69 views
0

我需要圍繞位圖的角落。之後,我需要爲它添加邊框。我已經完成了下面的源代碼來圓角,但我不知道如何使用畫布在位圖中繪製邊框。有什麼辦法可以做到嗎?由於如何使用畫布在位圖中繪製筆畫?

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; 
+0

這行代表canvas.drawRoundRect(rectF,20.0f,20.0f,paint); ? – ingsaurabh 2011-05-31 10:19:30

回答

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

} 
+0

謝謝。但是varibles sStrokePaint和sPaint的定義在哪裏? – Alex 2011-05-31 10:37:35

+0

查看編輯:.. – Udaykiran 2011-05-31 10:49:07

+0

雖然這不完全是我的解決方案,但它對我非常有用。謝謝 – Alex 2011-05-31 11:43:13