通过颜色变换矩阵更改位图的颜色不起作用

时间:2015-06-05 06:13:43

标签: android bitmap colormatrix

在下面我试图通过使用颜色变换矩阵方法来改变Ic_Launcher图像的颜色。虽然它适用于代码中存在的红色静态矩阵,但它不能用于其他颜色,我试图将十六进制代码转换为ARGB,最后转换为颜色转换矩阵。我的代码有问题吗?

 @Override
protected void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);
    setContentView(R.layout.activity_main);
    Bitmap icon = BitmapFactory.decodeResource(this.getResources(),
            R.drawable.ic_launcher);
    ImageView iv=(ImageView)findViewById(R.id.imageView);

    changeBitmapColor(icon,iv);


}

public void changeBitmapColor(Bitmap sourceBitmap,ImageView iv){


    float[] colorTransformRed = {
            0, 1f, 0, 0, 0,
            0, 0, 0f, 0, 0,
            0, 0, 0, 0f, 0,
            0, 0, 0, 1f, 0
    };




    float[] colorTransform=rgbToFloatArray(hexToRGBArray("FF00FF"));

    ColorMatrix colorMatrix = new ColorMatrix();
    colorMatrix.setSaturation(0.0f); //Remove Colour
    colorMatrix.set(colorTransform); //Apply the new color

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

    Bitmap resultBitmap = Bitmap.createBitmap(sourceBitmap, 0, (int)(sourceBitmap.getHeight() * 0.15), sourceBitmap.getWidth(), (int)(sourceBitmap.getHeight() * 0.75));

    iv.setImageBitmap(resultBitmap);
    Canvas canvas = new Canvas(resultBitmap);
    canvas.drawBitmap(resultBitmap, 0, 0, paint);




}




public float[] rgbToFloatArray(float[]rgb){

    float a=1f,b=0f,c=0f,d=0f,e=0f,
            f=0f,g=1f,h=0f,i=0f,j=0f,
            k=0f,l=0f,m=1,n=0f,o=0f,
            p=0f, q=0f,r=0f,s=1f,t=0f;

    float R=Float.parseFloat(rgb[0]+"");
    float G=Float.parseFloat(rgb[1]+"");
    float B=Float.parseFloat(rgb[2]+"");
    float A=Float.parseFloat(rgb[3]+"");


    System.out.println("R---"+R+"==G--"+G+"==B---"+B+"==A---"+A);

   float[] tm= {
           a * R, b * G, c * B, d * A, e,
           f * R, g * G, h * B, i * A , j,
           k * R, l * G, m * B, n * A, o,
           p * R, q * G, r * B,s*A , t
   };







    return tm;
}

public float[]  hexToRGBArray(String hex){

    float[]rgb=new float[4];

    int color = (int)Long.parseLong(hex, 16);
    float r=   (color >> 16) & 0xFF;
    float g= (color >> 8) & 0xFF;
    float b=  (color >> 0) & 0xFF;
    float a= (color >> 24) & 0xFF;
    rgb[0]=r;
    rgb[1]=g;
    rgb[2]=b;
    rgb[3]=a;

    return  rgb;

}

0 个答案:

没有答案