2012-03-21 94 views
4

我需要一個函數,它將採用位圖並使用更改後的顏色返回位圖。它需要快速簡單。使用功能更改位圖顏色

它的目的是改變顏色,它也是一個帶alpha的png。

我看過網上,但我不能使用畫布或任何外部。該函數駐留在一個外部對象(不要問..)

這是我到目前爲止(去工作)。我知道我真的很接近,只是一個整理顏色矩陣和變成alpha的問題。

public Bitmap changeBitmapColor(Bitmap sourceBitmap, int deg) 
{ 
    int width, height; 
    height = sourceBitmap.getHeight(); 
    width = sourceBitmap.getWidth();  

    Bitmap bmpGrayscale = Bitmap.createBitmap(width, height, Bitmap.Config.RGB_565); 

    Canvas c = new Canvas(bmpGrayscale); 
    Paint paint = new Paint(); 

    //figure out color matricies. 
    ColorMatrix cm = new ColorMatrix(); 

    //cm.setSaturation(0); 

    cm.set(new float[] 
    { 
      0, 0, 0, 0, 0, 
      0, 1, 0, 0, 0, 
      0, 0, 255, 0, 0, 
      0, 0, 0, 1, 0, 
      0, 0, 0, 0, 1 
     }); 


    ColorMatrixColorFilter f = new ColorMatrixColorFilter(cm); 
    paint.setColorFilter(f); 

    c.drawBitmap(sourceBitmap, 0, 0, paint); 

    return bmpGrayscale; 
} 

任何幫助將是偉大的!

------- --------固定

我已經改變顏色矩陣解決了這個,現在的位圖會改變顏色&不顯示alpha值。

第一件事是矩陣:

cm.set(new float[] 
    { 
      0, 0, 0, 0, 0, 
      0, 1, 0, 0, 0, 
      0, 0, 140, 0, 0, 
      0, 0, 0, 1, 0, 
      0, 0, 0, 0, 1 
    }); 

我不得不改變第二件事是這行代碼:

Bitmap newBM = Bitmap.createBitmap(width, height, Bitmap.Config.ARGB_8888); 

好運讀者!

回答

0

------- --------固定

我已經改變顏色矩陣解決了這個,現在的位圖會改變顏色&不顯示alpha值。

第一件事是矩陣:

cm.set(new float[] 
{ 
     0, 0, 0, 0, 0, 
     0, 1, 0, 0, 0, 
     0, 0, 140, 0, 0, 
     0, 0, 0, 1, 0, 
     0, 0, 0, 0, 1 
}); 

我不得不改變第二件事是這行代碼:

位圖newBM = Bitmap.createBitmap(寬度,高度,Bitmap.Config.ARGB_8888) ;

祝你好運讀者!

0

我不明白爲什麼獨立排除使用Canvas。您可以創建一個新的位圖,創建一個Canvas來繪製它,然後使用具有彩色濾鏡集的Paint(使用setColorFilter)對原始位圖進行繪製。 PorterDuffColorFilter類可能對此有所幫助。

0

我沒有得到什麼你的目標是改變顏色,以及什麼意思參數int deg?對於alpha事物:可能有助於將Bitmap bmpGrayscale中的顏色模型從RGB_565更改爲ARGB_8888,因爲該模型具有Alpha通道。 Look at Bitmap.Config

+0

感謝您的幫助。我想到了! :-) – 2012-03-22 22:21:05