2011-09-23 83 views
0

我想更改imageview中存在的图像的颜色。我从Bitmap对象的imageview中获取图像,并在其上应用了colormatrix。 问题是,一旦我改变图像的颜色,它不会改变bt覆盖以前的颜色,我想要的是,当我改变颜色时,图像的以前的颜色应该被删除,并且任何特定的颜色,我选择应用。更改图像的颜色android

我用下面的代码来做到这一点...

void setImageColor(RGBColor rgbcolor,ImageView view)//,Bitmap sourceBitmap) 
    { 
     view.setDrawingCacheEnabled(true); 
     Bitmap sourceBitmap = view.getDrawingCache(); 
     if(sourceBitmap!=null) 
     { 
     float R = (float)rgbcolor.getR(); 
     float G = (float)rgbcolor.getG(); 
     float B = (float)rgbcolor.getB(); 

     Log.v("R:G:B",R+":"+G+":"+B);  

     float[] colorTransform = 
     { R/255f, 0, 0, 0, 0, // R color 
      0, G/255f, 0, 0, 0, // G color 
      0, 0, B/255f, 0, 0, // B color 
      0, 0, 0, 1f, 0f 
     };     

     ColorMatrix colorMatrix = new ColorMatrix(); 
     colorMatrix.setSaturation(0f); //Remove Colour 

     colorMatrix.set(colorTransform); 
     ColorMatrixColorFilter colorFilter = new ColorMatrixColorFilter(colorMatrix); 
     Paint paint = new Paint(); 
     paint.setColorFilter(colorFilter); 

     Bitmap mutableBitmap = sourceBitmap.copy(Bitmap.Config.ARGB_8888, true); 
     view.setImageBitmap(mutableBitmap); 
     Canvas canvas = new Canvas(mutableBitmap); 
     canvas.drawBitmap(mutableBitmap, 0, 0, paint);  
     } 
     else 
      return; 
    } 
+0

你有答案的答案吗? – ALiGOTec

回答

1

声明静态sourceBitmap而做到这一点只有一次:Bitmap sourceBitmap = view.getDrawingCache();让我们在你的活动onResume()说(或当您更改的ImageView图像)。

而且你的功能应该是:

void setImageColor(RGBColor rgbcolor, ImageView view, Bitmap sourceBitmap) { 
    if (sourceBitmap == null) return; 

    float r = (float) rgbcolor.getR(), 
      g = (float) rgbcolor.getG(), 
      b = (float) rgbcolor.getB(); 

    Log.v("R:G:B", r + ":" + g + ":" + b);  

    float[] colorTransform = 
    {  
     r/255, 0 , 0 , 0, 0, // R color 
     0 , g/255, 0 , 0, 0, // G color 
     0 , 0 , b/255, 0, 0, // B color 
     0 , 0 , 0 , 1, 0 
    }; 

    ColorMatrix colorMatrix = new ColorMatrix(); 
    colorMatrix.setSaturation(0f); // Remove colour 
    colorMatrix.set(colorTransform); 

    ColorMatrixColorFilter colorFilter = new ColorMatrixColorFilter(colorMatrix); 

    Paint paint = new Paint(); 
    paint.setColorFilter(colorFilter); 

    Bitmap mutableBitmap = sourceBitmap.copy(Bitmap.Config.ARGB_8888, true); 
    view.setImageBitmap(mutableBitmap); 

    Canvas canvas = new Canvas(mutableBitmap); 
    canvas.drawBitmap(mutableBitmap, 0, 0, paint);  
} 

这样,您将保持不变图像与原始应用过滤器。