我有一個定製的View
,它總是在某個旋轉時繪製一個Bitmap
。我覆蓋onDraw
方法,旋轉Canvas
並用反鋸齒Paint
繪製位圖。位圖未繪製消除鋸齒
public RotatedImageView(Context context, AttributeSet attrs, int defStyle) {
super(context, attrs, defStyle);
someBitmap = BitmapFactory.decodeResource(getResources(), R.drawable.placeholder);
}
@Override
protected void onDraw(Canvas canvas) {
// Save and rotate canvas
canvas.save();
canvas.rotate(3F, getWidth()/2, getHeight());
// Draw the icon
Paint p = new Paint(Paint.ANTI_ALIAS_FLAG);
canvas.drawBitmap(someBitmap, 0, 0, p);
canvas.drawRoundRect(new RectF(75, 50, 225, 200), 10, 10, p);
// All done; restore canvas
canvas.restore();
}
但是,我總是在位圖上看到鋸齒狀的邊緣。請注意,粗糙的矩形可以很好地消除鋸齒邊緣。此外,當我應用p.setFilterBitmap(true);
這個工程(位圖表面得到過濾/平滑)正確。我錯過了什麼嗎?
這裏有一個最小的Android項目與一個畫面的孤立的例子,顯示繪製非反鋸齒位圖的角度,從資源加載:https://bitbucket.org/erickok/antialiastest
更新:我有也試過如下:
Paint p = new Paint();
p.setAntiAlias(true);
p.setFilterBitmap(true);
p.setDither(true);
canvas.drawBitmap(someBitmap, 0, 0, p);
但是,這並不利於爲setFilterBitmap
過濾表面;它不會抵消邊緣。另外,setAntiAlias
與在Paint
構造函數中直接設置標誌的做法相同。如果有疑問,請嘗試我最小的測試項目。非常感謝您的幫助!
感謝您的回覆。這等於我不幸的,所以它具有相同的效果(或者說,對鋸齒狀邊緣沒有影響)。 –