2012-01-24 3 views
0

I는이 I 화면에 그리는로이드 그리기 컬러 매트릭스

BitmapDrawable

I 4 검색 막대 (콘트라스트, 휘도, 색조, 채도)

은이 같은 BitmapDrawable의 콘트라스트 변화를 가지고

이 같은 BitmapDrawable의
public void setContrast(float mAngle) { 
ColorMatrix matrix = new ColorMatrix(); 

    float contrast = mAngle/180.f; 

      float scale = contrast + 1.f; 
    float translate = (-.5f * scale + .5f) * 255.f; 

    float[] cntr = new float[] { scale, 0, 0, 0, translate, 0, scale, 0, 0, translate, 0, 0, 
      scale, 0, translate, 0, 0, 0, 1, 0 }; 

      matrix.set(cntr); 

    drawable.setColorFilter(new ColorMatrixColorFilter(matrix)); 
} 

변경 색상 :

public void setHue(float value { 
    ColorMatrix matrix = new ColorMatrix(); 

value = cleanValue(value, 180f)/180f * (float) Math.PI; 
    if (value == 0) { 
     return; 
    } 
    float cosVal = (float) Math.cos(value); 
    float sinVal = (float) Math.sin(value); 
    float lumR = 0.213f; 
    float lumG = 0.715f; 
    float lumB = 0.072f; 
    float[] fmatrix = new float[] { lumR + cosVal * (1 - lumR) + sinVal * (-lumR), 
      lumG + cosVal * (-lumG) + sinVal * (-lumG), 
      lumB + cosVal * (-lumB) + sinVal * (1 - lumB), 0, 0, 
      lumR + cosVal * (-lumR) + sinVal * (0.143f), 
      lumG + cosVal * (1 - lumG) + sinVal * (0.140f), 
      lumB + cosVal * (-lumB) + sinVal * (-0.283f), 0, 0, 
      lumR + cosVal * (-lumR) + sinVal * (-(1 - lumR)), 
      lumG + cosVal * (-lumG) + sinVal * (lumG), 
      lumB + cosVal * (1 - lumB) + sinVal * (lumB), 0, 0, 0f, 0f, 0f, 1f, 0f, 0f, 0f, 0f, 
      0f, 1f }; 

     matrix.postConcat(new ColorMatrix(fmatrix)); 

    drawable.setColorFilter(new ColorMatrixColorFilter(matrix)); 
    } 

    protected float cleanValue(float p_val, float p_limit) { 
     return Math.min(p_limit, Math.max(-p_limit, p_val)); 
} 

잘 작동하지만 함께 작업하기를 원합니다. 어떻게 할 수 있습니까?

+0

대비를 변경하면 그 행렬을 저장하고 색조를 변경 한 후에는 저장된 (대비) 행렬이 증가하지만 잘 작동하지 않습니다. – Androider

답변

0

색상 행렬을 연결해야합니다. ColorMatrix API에서 setConcat 함수를 확인하십시오.