2013-01-17 53 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