Saludos de nuevo gente, pues aquí haciendo mi aparición semanal o casual podríamos decirlo.
Hoy les mostrare como hacer cosas nuevas a nuestras imágenes como en el proyecto del tema
http://www.forosdelweb.com/f165/proc...ndroid-933993/
donde convertíamos una imagen RGB en escala de grises, pues ahora podemos irle agregando cosas nuevas a ese proyecto y a su vez creando menús que nos facilitaran el procesamiento de la imagen esto pueden encontrarlo en el tema de
http://www.forosdelweb.com/f165/hey-...comida-928526/
Bueno empecemos.
El día de hoy agregaremos una sección o submenu de procesamiento de imágenes donde podremos seleccionar si queremos solo ver nuestra imagen con el canal rojo activo y verde-azul desactivados, también las diferentes combinaciones posibles con estos 3 conjuntos.
Esto que quiere decir, como mencionamos anteriormente trataremos a las imágenes como si fueran matrices que dependerá sus dimensiones según el tamaño de nuestra imagen; ademas de repetirse 3 veces en el espacio donde cada una sera un canal R, G y B.
Tomando esto podemos hacer que los canales RB desaparezcan por así decirlo, pero en si los dejaremos transparentes y la forma de hacer eso es dejarlos con valores en 0. Ok empecemos a programar
Nuestras librerías importadas son las mismas a menos que quieran hacer menús ya tendrán que agregarle algunas si no pues sigamos. Nuestro código para la petición de la imagen y los valores de los pixeles son los mismos lo único que cambiaremos o agregaremos sera una nueva función, que de igual forma podemos mandarlo a llamar en nuestro evento del boton presionado o en los case de los menús.
Nuestra función para dejar solo el canal rojo seria algo como esto:
Cita: private int[] ChannelRed(Bitmap mBitmap)
{
int picw, pich;
picw = mBitmap.getWidth();
pich = mBitmap.getHeight();
int[] pix = new int[picw * pich];
mBitmap.getPixels(pix, 0, picw, 0, 0, picw, pich);
for (int y = 0; y < pich; y++)
for (int x = 0; x < picw; x++)
{
int index = y * picw + x;
int r = (pix[index] >> 16) & 0xff;
pix[index] = 0xff000000 | (r << 16) | (0 << 8) | 0;
}
return pix;
}
Fácil no
; bueno que nos dice el código, para iniciar le mandamos el Bitmap que queremos tratar, le leemos sus dimensiones y le sacamos sus valores en pixel, en nuestros 2 for's tratamos esos valores de pixeles para sacar su valor en el canal rojo y los volvemos a agregar en la variable pix, pero a diferencia de que donde deberían ir los valores para el canal G y B agregaremos puros 0's.
Nuestra función para dejar solo el canal verde seria lo mismo solo cambiaremos lo que contendrá los for's:
Cita: int g = (pix[index] >> 8) & 0xff;
pix[index] = 0xff000000 | (0 << 16) | (g << 8) | 0;
De la misma forma para el canal azul:
Cita: int b = pix[index] & 0xff;
pix[index] = 0xff000000 | (0 << 16) | (0 << 8) | b;
Y como siempre les dejo las imágenes con los resultados. Para este caso agregue una imagen donde tuviera diferentes colores para ver el efecto.
Aquí les despliego el menú que agregue a mi proyecto
Seleccionamos la opción de Canal y nos sale un submenu
Y las imágenes con su respectivo canal activo
Bueno eso es todo espero les sirva, ahorita voy a empezar a hacer una nueva donde mostraremos la imagen invertida que son uno de los efectos que a varios les gusta
cya later