2012-01-24 3 views
0

У меня есть BitmapDrawableандроид вытяжке цветовая матрица

Я рисую его на экране

У меня есть 4 SeekBar (яркость, контрастность, оттенок, насыщенность)

я изменить контрастность 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)); 
} 

и изменить оттенок BitmapDrawable как это:

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

Вам необходимо объединить цветовые матрицы. Проверьте функцию setConcat в API ColorMatrix.

Смежные вопросы