Bitmap拉伸後出現鋸齒的幾種解決辦法

風的王子發表於2013-09-02

最近在做Flow Em時 遇到圖片拉伸後出現嚴重鋸齒的情況,後來網上查了下,經過幾次嘗試算是解決了問題,現在就來總結下:

網上搜到的兩種解決方法:

1.給Paint加上抗鋸齒標誌。然後將Paint物件作為引數傳給canvas的繪製方法。

paint.setAntiAlias(true);

canvas.drawBitmap(bmp ,fX,fY,paint);

2.直接給canvas加抗鋸齒。

canvas.setDrawFilter(new PaintFlagsDrawFilter(0, Paint.ANTI_ALIAS_FLAG|Paint.FILTER_BITMAP_FLAG));

這兩種方法  大多數情況下都能解決問題,但是部分情況下效果不太理想。除此之外還可以嘗試下面兩種方法:

3.  建立bitmap時就做拉伸處理:

Bitmap bmp = Bitmap.createScaledBitmap(bmpSrc, (int) (bmpSrc.getWidth() * scale), (int) (bmpSrc.getHeight() * scale), true);

注意這個 方法的最後一個引數一定要設為true,否則無法去鋸齒

4 .在繪製影像時利用matrix對影像進行拉伸。

Matrix matrix = new Matrix();

matrix.setTranslate(fX,fY);

matrix.postScale(scale,scale,fX,fY);

canvas.drawBitmap(bmp,matrix,null);

相關文章