2011-09-10 55 views
3

我試圖用油漆ColorFilter 反轉位圖我用這個鏈接作爲參考位圖: http://www.mail-archive.com/[email protected]/msg47520.html的Android反轉在運行時

,但它絕對沒有任何影響 - 位圖通常是繪製你可以告訴我做錯了什麼?

定義float數組:

float invert [] = { 
     -1.0f, 0.0f, 0.0f, 1.0f, 0.0f, 
     0.0f, -1.0f, 0.0f, 1.0f, 0.0f, 
     0.0f, 0.0f, -1.0f, 1.0f, 0.0f, 
     1.0f, 1.0f, 1.0f, 1.0f, 0.0f 

};

安裝油漆構造

ColorMatrix cm = new ColorMatrix(invert); 
    invertPaint.setColorFilter(new ColorMatrixColorFilter(cm)); 

參考draw()方法

c.drawBitmap(Bitmap, null, Screen, invertPaint); 

編輯:我能得到它通過在抽籤聲明油漆分配工作:

ColorMatrix cm = new ColorMatrix(invert); 
invertPaint.setColorFilter(new ColorMatrixColorFilter(cm)); 
c.drawBitmap(rm.getBitmap(DefaultKey), null, Screen, invertPaint); 

但現在它呈現非常慢(可能是因爲它建立了一個複雜的矩陣有史以來單幀)...是否有一個原因,當它在同一個方法中工作?

EDIT2: NEVERMIND !!!大聲笑,問題是我有兩個構造函數,我只是在其中一個配置colorfilter ...該進程仍然非常CPU佔用,並導致幀率問題

+0

這對於色彩反轉一個很奇怪的矩陣。它應該是5x4嗎? –

+1

不知道它是什麼意思,但它的工作原理......但它很慢,可能值得它只是保存一個倒置的位圖並交換它們:/ – GideonKain

回答

4

這是一個古老的線程。

但是:矩陣不利於透明反轉反鋸齒圖像。

應該是:

float invert[] = 
{ 
-1.0f, 0.0f, 0.0f, 1.0f, 1.0f, 
0.0f, -1.0f, 0.0f, 1.0f, 1.0f, 
0.0f, 0.0f, -1.0f, 1.0f, 1.0f, 
0.0f, 0.0f, 0.0f, 1.0f, 0.0f 
}; 
+0

這是錯誤的。你不希望alpha通道改變紅色,綠色,藍色通道(第二列到最後一列)。正確的矩陣在文檔中作爲示例給出:https://developer.android.com/reference/android/graphics/ColorMatrix.html – fdermishin