2015-08-09 55 views
0

我試圖在畫布中繪製圓形位圖。如果我想要繪製的畫布是透明的,則位圖會被正確剪裁,但如果我以前使用不同的顏色繪製矩形,則不會。使用XferMode在畫布上繪製圓形位圖

enter image description here enter image description here

繼承人我得到了什麼

paint.setColor(col.colors_Form[1]); 
    mCanvas.drawRect(0, 0, dim.titleContainer_Width, dim.titleContainer_Height, paint); 

    [...] 


    if (!mFormValues_BasicInformation.get(0).getAvatarImage().equals("")) { 

     mCanvas.save(); 

     mCanvas.translate(300, 300); 

     byte[] byteArray = mFormValues_BasicInformation.get(0).getAvatarImage(); 

     Bitmap bmp = Bitmap.createScaledBitmap(BitmapFactory.decodeByteArray(byteArray, 0, byteArray.length), 250, 250, false); 

     final int color = col.colors_Form[1]; 
     final Paint avatarPaint = new Paint(); 
     final Rect rect = new Rect(0, 0, bmp.getWidth(), 
       bmp.getHeight()); 

     avatarPaint.setAntiAlias(true); 
     mCanvas.drawARGB(0, 0, 0, 0); 

     avatarPaint.setColor(color); 
     mCanvas.drawCircle(bmp.getWidth()/2, 
       bmp.getHeight()/2, bmp.getWidth()/2, paint); 
     avatarPaint.setXfermode(new PorterDuffXfermode(PorterDuff.Mode.SRC_IN)); 
     mCanvas.drawBitmap(bmp, rect, rect, avatarPaint); 
     bmp.recycle(); 

     mCanvas.restore(); 
    } 

有誰知道如何解決這個問題? Thx提前! :)

+1

使用'BitmapShader',其最簡單的辦法... – pskink

+0

OUH那不是很具體: (你能提供一個例子嗎? – luQ

+0

問叔叔谷歌,他會回答很多答案 – pskink

回答

1

BitmapShader的伎倆:

 [...] 
     byte[] byteArray = mFormValues_BasicInformation.get(0).getAvatarImage(); 
     Bitmap bmp = Bitmap.createScaledBitmap(BitmapFactory.decodeByteArray(byteArray, 0, byteArray.length), 500, 500, false); 

     final Paint avatarPaint = new Paint(); 

     BitmapShader shader = new BitmapShader(bmp, BitmapShader.TileMode.CLAMP, BitmapShader.TileMode.CLAMP); 
     avatarPaint.setShader(shader); 
     avatarPaint.setAntiAlias(true); 

     float r = Math.min(bmp.getWidth(), bmp.getHeight())/2f; 
     mCanvas.drawCircle(r, r, r, avatarPaint); 

     bmp.recycle(); 
     [...] 

附加信息:

CircleTranform