2012-02-07 27 views
1

ColorMatrixを使用して画像の明度を調整しようとしています(色相を調整しようとするとPhotoshopでこのオプションが表示され、明度と明るさには2つの異なる機能があります)これを実現するために変更する。ColorMatrixを使用して明度を調整する

現在、私はこのコード

public static void adjustHue(ColorMatrix cm, float value) 
    { 
     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[] mat = 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 }; 
     cm.postConcat(new ColorMatrix(mat)); 
    } 

を使用して色相を変更することができるよ私は同じように明るさを変更するためにcolormatrixの使用方法について理解したいです。これを達成する他の方法があれば、私は解決のために開いています:)

答えて

3

[OK]を私はついにこれを理解しました。

明度は、ここで私は進歩の値は-100(暗い)から100(明るい)

である

public static PorterDuffColorFilter applyLightness(int progress) { 

    if(progress>0) 
    { 
     int value = (int) progress*255/100; 
     return new PorterDuffColorFilter(Color.argb(value, 255, 255, 255), Mode.SRC_OVER); 
    } else { 
     int value = (int) (progress*-1)*255/100; 
     return new PorterDuffColorFilter(Color.argb(value, 0, 0, 0), Mode.SRC_ATOP); 
    } 

} 

を使用している方法ですPorterDuffColorFilterクラス

を使用して調整することができます

このメソッドには、Photoshopのように値を渡してください。取得したフィルタは、ペイントとキャンバスで使用できます。

これは誰かを助けることを望みます。

2

あなたがhere詳細を読むことができますが、私はので、それのスピードのRenderScriptを使用するためにあなたをお勧めしたい明るさ

public static void adjustLightness(ColorMatrix cm, float value) 
{ 
    value = cleanValue(value, 100); 
    if (value == 0) 
    { 
     return; 
    } 

    float[] mat = new float[] 
      { 
        1,0,0,0,value, 
        0,1,0,0,value, 
        0,0,1,0,value, 
        0,0,0,1,0, 
        0,0,0,0,1 
      }; 
    cm.postConcat(new ColorMatrix(mat)); 
} 

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

を変更するためにこれを使用することができます。

関連する問題