¿Puedes cambiar el tono de imagen de BitMap en Android ImageView?
-
29-10-2019 - |
Pregunta
Aquí está la situación, tengo una barra de búsqueda y quiero, cuando lo deslizo, para cambiar el tono de una imagen que está en una vista de imagen. Todas las cosas que he visto sobre el cambio de tonelada requieren el uso de una colormitia, pero no sé cómo relacionar un mapa de bits con una matriz de color. ¿Sugerencias?
Solución
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);
Otros consejos
Aquí hay un ejemplo que dibuja un mapa de bits en grisescala.
http://www.mail-archive.com/android-developers@googlegroups.com/msg38890.html
Solo reemplazar cm.setSaturation(0);
con cm.setRotate(int axis, float degrees);
.
Licenciado bajo: CC-BY-SA con atribución
No afiliado a StackOverflow