绘制圆形位图时的抗锯齿

时间:2016-05-06 11:45:02

标签: java android android-canvas antialiasing

我想绘制一个圆形位图(透明方形50x50,圆形彩色图片,中心半径为25),边缘光滑。我该怎么处理? 我试过这个,但它不起作用(边缘不平滑):

Paint p =new Paint();
p.setFilterBitmap(true);
p.setAntiAlias(true);
canvas.drawBitmap(bitmap, x - (bitmap.getWidth() / 2), y - (bitmap.getWidth() / 2), p);

1 个答案:

答案 0 :(得分:0)

您可以查看以下代码,并且必须进行一些解决方法

int w = bitmap.getWidth();                                          
int h = bitmap.getHeight();  

int radius = Math.min(h / 2, w / 2);                                
Bitmap output = Bitmap.createBitmap(w + 8, h + 8, Config.ARGB_8888);

Paint p = new Paint();                                              
p.setAntiAlias(true);                                               

Canvas c = new Canvas(output);                                      
c.drawARGB(0, 0, 0, 0);                                             
p.setStyle(Style.FILL);                                             

c.drawCircle((w / 2) + 4, (h / 2) + 4, radius, p);                  

p.setXfermode(new PorterDuffXfermode(Mode.SRC_IN));                 

c.drawBitmap(bitmap, 4, 4, p);                                      
p.setXfermode(null);                                                
p.setStyle(Style.STROKE);                                           
p.setColor(Color.WHITE);                                            
p.setStrokeWidth(3);                                                
c.drawCircle((w / 2) + 4, (h / 2) + 4, radius, p);                  

return output; 

Source