2010-11-02 53 views
2

我有,我想根據用戶選擇Android的位圖顏色實時修改

從我看到真正做到這一點的唯一方法在互聯網上的例子來改變顏色的ImageView的是經歷和修改每個像素...但它似乎是極其緩慢

如果我添加到我的代碼這一點,它需要足夠長的時間,它會提示用戶強制關閉或等待

for(int i =0 ; i < mBitmap.getHeight(); ++i) 
     { 
      for(int g = 0; g < mBitmap.getWidth(); ++g) 
      { 

      } 
     } 

什麼是最好的方式改變圖像的顏色?

的圖像是一個小圖像的320x100,並且大多用在裏面的小圖像透明,小圖片我想改變的

+0

如果你的圖像是單色的,你可以使用Xfermode做一些快速的顏色變化。 – xandy 2010-11-02 03:06:02

回答

2

問題在於使用getPixel(x,y)。逐個抓取每個像素是一個非常緩慢的過程。而是使用getPixels

void getPixels(int[] pixels, int offset, int stride, int x, int y, int width, int height) 
     Returns in pixels[] a copy of the data in the bitmap. 

它會回到你的像素值的整數數組(和陣列上運行,然後用setPixels),它會更快(但需要更多的內存)

對於這個方法可以做的小圖像。步幅等於圖像寬度。

mBitmap.getPixels(pixels, 0 , mBitmap.getWidth(), 0, 0 , mBitmap.getWidth(), mBitmap.getHeight()); 
0

色彩在複雜的順序:

  1. 檢查API演示中使用ColorFilter和ColorMatrix的示例。但是,由於您將其描述爲您嘗試修改的圖像中的圖像,因此這可能不適用。

  2. 將您的處理代碼置於其自己的線程以避免應用程序未響應問題。看看AsyncTask。您可能需要在處理時運行等待動畫。

  3. 考慮OpenGL ES 1.x.將圖像用作紋理並用alpha覆蓋顏色以獲得效果。雖然這會有更好的表現,但需要考慮添加UI元素的複雜性(即構建您自己的)。

+0

1.明天去看看,但據我所知不是我想要的......這個例子顯示瞭如何做對比 2.好主意,但這是在一個listview裏面,所以不實用 3.在列表視圖中 – morty346 2010-11-03 02:59:27

+0

您可能希望更新有關您的用例的更多詳細信息。像列表視圖中有多少項目,爲什麼?如果可能的話,我會在進入列表視圖之前預渲染圖像,也許使用JNI。 – 2010-11-03 04:02:33