我正在尝试使用ColorMatrix调整图像的亮度(你可以在Photoshop中看到这个选项,当你试图调整色调时,亮度和亮度是两个不同的功能),但我不知道应该更改哪些值来实现这一点。
目前,我可以使用以下代码更改色调
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以同样的方式改变亮度。如果有任何其他方法来实现这一点,我愿意寻求解决方案:)
发布于 2012-02-10 19:05:31
Ok..So我终于想通了。
可以使用PorterDuffColorFilter类调整亮度
下面是我使用的方法
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);
}
}进度值从-100 (暗)到100(亮)
只需将photoshop中的值传递给此方法即可。你得到的滤镜可以和画布和画布一起使用。
希望这对某些人有帮助。
发布于 2014-11-28 06:33:01
您可以使用此选项来更改亮度
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));
}你可以阅读更多的here,但我建议你使用RenderScript,因为它的速度很快。
https://stackoverflow.com/questions/9175088
复制相似问题