Ver Mensaje Individual
  #1 (permalink)  
Antiguo 05/08/2011, 20:25
Avatar de zero_master
zero_master
 
Fecha de Ingreso: junio-2011
Ubicación: Leon, Gto
Mensajes: 290
Antigüedad: 13 años, 5 meses
Puntos: 74
Procesamiento de imágenes en android (2da Parte)

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

Última edición por cvander; 16/08/2011 a las 01:53