您可以在android ImageView上更改位图的图像色调吗?
这里是情况,我有一个搜索杆,当我滑动它时,我想改变ImageView中图像的色调。我所看到的所有关于改变色调的事情都需要使用颜色矩阵,但我不知道如何将位图与颜色矩阵关联起来。建议?这里有一个以灰度绘制位图的示例您可以在android ImageView上更改位图的图像色调吗?,android,imageview,seekbar,colormatrix,hue,Android,Imageview,Seekbar,Colormatrix,Hue,这里是情况,我有一个搜索杆,当我滑动它时,我想改变ImageView中图像的色调。我所看到的所有关于改变色调的事情都需要使用颜色矩阵,但我不知道如何将位图与颜色矩阵关联起来。建议?这里有一个以灰度绘制位图的示例 只需更换cm.设置饱和度(0)带cm.setRotate(内轴,浮动度)该图像视图是否仅显示单一颜色区域?非常感谢!这很有魅力!请你解释一下背后的数学原理,或者提供一个链接。只是好奇它是如何工作的。再次感谢!如何从SeekBar调用此函数并应用于图像视图;浮子lumG=0.715f;浮
只需更换
cm.设置饱和度(0)代码>带cm.setRotate(内轴,浮动度)代码>该图像视图是否仅显示单一颜色区域?非常感谢!这很有魅力!请你解释一下背后的数学原理,或者提供一个链接。只是好奇它是如何工作的。再次感谢!如何从SeekBar调用此函数并应用于图像视图;浮子lumG=0.715f;浮子负载=0.072f;为什么选择这些值?axis的值应该是多少?
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));
}
private static float cleanValue(float p_val, float p_limit)
{
return Math.min(p_limit, Math.max(-p_limit, p_val));
}
-------
while drawing from canvas ... create an object of paint and ... set...
ColorMatrix mat = new ColorMatrix();`
adjustHue(mat, 110);
paint.setColorFilter(new ColorMatrixColorFilter(mat));
----
canvas.draw(bmp, 0,0,paint);