2013-01-17 62 views
2

在我的程序中,我正在尝试绘制像素图并且不希望出现抗锯齿。我已找到方法来禁用BitmapsDrawableBitmaps的反走样功能,但不支持Drawables。是否无法禁用Drawables的抗锯齿功能?可以在Android Canvas上对Drawable禁用抗锯齿功能吗?

我曾尝试以下:

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上。

Screenshots

任何了解被理解。

回答

5

您可以使用PaintFlagsDrawFilterCanvas.setDrawFilter(DrawFilter filter)整体Canvas关闭抗锯齿:

final DrawFilter filter = new PaintFlagsDrawFilter(Paint.ANTI_ALIAS_FLAG, 0); 
final Canvas canvas = ...; 

canvas.setDrawFilter(filter); 

UPDATE:

我看截图,我可以肯定地说这是不是一个消除锯齿问题。你看到的是bilinear filtration的结果,不幸的是它不能被硬件加速视图禁用。作为一种解决方法,您可以使用软件光栅化为您的视图:

view.setLayerType(View.LAYER_TYPE_SOFTWARE, null); 
+0

我试过这个,但它似乎没有工作。我用代码和屏幕截图为我的问题添加了一些编辑。 – mkatic

+0

请检查我的更新的答案 –

+0

感谢您的帮助,但这似乎并没有改变输出 '我想它仍然使用软件进行线性插值。我挖入线性插值并找不到任何帮助。你知道这个问题是否独立于Drawables?如果我无法解决这个问题,我的下一个行动计划就是尝试位图。 – mkatic