我有一个习惯View
,总是Bitmap
在某个旋转时绘制 a 。我覆盖该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
构造函数中直接设置标志相同。如果有疑问,请尝试我的最小测试项目。非常感谢您的帮助!