2011-01-31 27 views
4

我試圖創建一個色彩位圖的功能,色調與位圖的位圖?

這個工程...

imgPaint = new Paint(); 

    imgPaint.setColorFilter(new LightingColorFilter(color,0)); 

//when image is being drawn 
canvas.drawBitmap(img,matrix,imgPaint); 

然而,當位圖,必須不斷地(每一幀)繪製,我開始看到屏幕滯後,因爲這在設置彩色濾鏡之前沒有發生過,我相信每次我需要畫布時都會應用濾鏡。

有沒有辦法將塗料一次應用到位圖並使其永久更改?

任何幫助表示讚賞:)

+1

確保您只創建一次paint和colorfilter,將它們存儲在變量中以重用它們,而不是每一幀重新創建它們。 – 2011-06-13 14:06:40

回答

4

創建第二位圖,並使用彩色濾光片繪製第一個位圖到它。然後使用第二個位圖進行大量渲染。

編輯:每請求,這裏是代碼,將做到這一點:

public Bitmap makeTintedBitmap(Bitmap src, int color) { 
    Bitmap result = Bitmap.createBitmap(src.getWidth(), src.getHeight(), src.getConfig()); 
    Canvas c = new Canvas(result); 
    Paint paint = new Paint(); 
    paint.setColorFilter(new LightingColorFilter(color,0)); 
    c.drawBitmap(src, 0, 0, paint); 
    return result; 
} 

你可以這樣調用此方法一次,一個位圖轉換爲有色位圖並將結果保存在一個實例變量。然後,您可以在繪製到canvas的方法中直接使用有色位圖(不帶濾色器)。 (在主要繪製方法中預先分配您將使用的Paint對象並將其另存爲實例變量也不失爲一個好主意,而不是在每次繪製時分配新的Paint)。

+1

感謝Ted的快速反應,我該如何使用Paint將第一個位圖繪製到第二個位圖? – seveibar 2011-01-31 21:19:41