在我的程序中,我正在尝试绘制像素艺术,并且不希望发生抗锯齿。我找到了为Bitmaps和DrawableBitmaps禁用抗锯齿功能的方法,但没有为Drawables禁用抗锯齿功能。是否无法为Drawables禁用抗锯齿?
我尝试了以下内容:
drawable.setDither(false);
drawable.setFilterBitmap(false);
正如vmironov所建议的,我试图删除画布上的任何过滤,如下所示:
DrawFilter filter = new PaintFlagsDrawFilter(Paint.ANTI_ALIAS_FLAG | Paint.FILTER_BITMAP_FLAG | Paint.DITHER_FLAG, 0);
Canvas canvas = surfaceHolder.lockCanvas();
canvas.setDrawFilter(filter);
这有一个奇怪的效果,即在我的东芝Thrive上消除抗锯齿,但在我的Galaxy Nexus上没有。
任何见解都表示赞赏。
答案 0 :(得分:5)
您可以使用Canvas
和PaintFlagsDrawFilter
为整个Canvas.setDrawFilter(DrawFilter filter)
停用抗锯齿功能:
final DrawFilter filter = new PaintFlagsDrawFilter(Paint.ANTI_ALIAS_FLAG, 0);
final Canvas canvas = ...;
canvas.setDrawFilter(filter);
<强>更新强>
我查看了屏幕截图,我可以肯定地说这不是一个消除锯齿的问题。您看到的是bilinear filtration
的结果,不幸的是,无法为硬件加速视图禁用它。作为一种解决方法,您可以使用软件光栅化来查看视图:
view.setLayerType(View.LAYER_TYPE_SOFTWARE, null);