Ver Mensaje Individual
  #1 (permalink)  
Antiguo 27/07/2011, 18:49
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
RGB de una imagen (Utilizando todo lo aprendido)

Saludos gente; este va a ser tal vez lo ultimo que publique por que ya me aburrió que no hay comunicación con los que publican y los que leen o si usan o no les sirve las cosas así que mejor me mudo a otro foro.

Hoy les mostrare que con lo que e publicado se puede hacer una aplicación puede que para algunos les sirva o no, en la universidad nunca falta el maestro que le gusta jugar con las imágenes y leer los valores RGB de una imagen, si nos vamos a los clásicos libros de procesamiento de imágenes una imagen lo miran como una matriz.

Cita:
[URL="http://es.wikipedia.org/wiki/Matriz"]http://es.wikipedia.org/wiki/Matriz[/URL]
Si suponemos que la imagen es una matriz donde la dimensión dependerá del tamaño de nuestra imagen, supongamos el icono de android que nos carga por default al crear un proyecto es de 24x24 eso quiere decir que nuestra matriz tiene una dimensión de 24x24

Pero ademas tiene 3 dimensiones mas por los valores de cada valor RGB eso nos convierte una matriz de 24x24x3. Muchos valores verdad

La ventaja de android es que podemos leer todo el valor del pixel y así poder sacar los 3 valores RGB de la imagen ademas de tener el Alpha entonces tendríamos el ARGB de cada pixel.

Para este proyecto que le titularemos "Sacar el RGB del pixel donde nosotros hagamos Touch" algo largo nop . Utilizaremos las cosas que e ido publicando poco a poco.

Primero miremos como cargar una imagen en mi caso voy a utilizar la siguiente:


Razón simple, para saber si lo que estamos leyendo del RGB sea correcto, un ejemplo si hago Touch en la parte del color rojo debería tener valores de R= 255 G= 0 B= 0. Bueno primero debemos saber como desplegar esta figura para eso debemos guardarla en la siguiente dirección res/drawable-mdpi

Ademas vamos agregar el texto que vamos a desplegar en este caso seria el pixel que estamos haciendo Touch y el valor RGB, nos vamos a nuestro archivo main.xml y agregamos lo siguiente:

Cita:
<TextView
android:id="@+id/Pixel"
android:layout_width="fill_parent"
android:layout_height="wrap_content"
android:text="Pixel= "
/>
<TextView
android:id="@+id/RGB"
android:layout_width="fill_parent"
android:layout_height="wrap_content"
/>
Corremos nuestro proyecto para ver que todo va bien por el momento . Y ahora nos falta agregar la imagen que vamos a buscar su RGB, para eso agregamos de nuevo modo en nuestro main.xml lo siguiente:

Cita:
<ImageView
android:src="@drawable/icon"
android:layout_width="wrap_content"
android:id="@+id/test_image"
android:layout_height="wrap_content"
android:layout_weight="1"></ImageView>
Por el momento solo nos carga el icono pequeño de android pero en el código en nuestro .java agregaremos la otra imagen que les mencione. Ahora la pregunta del millón como madres vamos a sacar el valor ARGB de la imagen dependiendo del pixe. Les ayudare un poco para eso usamos la siguiente función:

Cita:
public int[] RGBreturn(Bitmap x)
{
int pix = x.getPixel(10, 10);
int h[] = new int [4];
h[3] = (pix>>24)&0xFF;
h[0] = (pix>>16)&0xFF;
h[1] = (pix>>8)&0xFF;
h[2] = pix&0xFF;
return h;
}
Tarde unos días para poder encontrar la ecuación que cumpliera bien jeje y pidiéndole favor a mi novia que viera los valores en Corel. En este caso solo ando leyendo el valor en el pixel 10,10 de nuestra matriz para hacer pruebas ustedes tienen que modificarse para que puedan leer dependiendo la ubicación donde hicimos Touch, vayan a [URL="http://www.forosdelweb.com/f165/veamos-las-coordenadas-932269/"]http://www.forosdelweb.com/f165/veamos-las-coordenadas-932269/[/URL] Ahí explico como sacar el Touch de la pantalla entera deben de buscarle ustedes el modo para solo leer donde va a ir la imagen es cuestión de pensarle un rato.

Bueno hasta el momento esto es lo que llevo:
Cita:
Bitmap bMap;
ImageView image;
TextView text;
/** Called when the activity is first created. */
@Override
public void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.main);
bMap = BitmapFactory.decodeResource(getResources(), R.drawable.test);
image = (ImageView)findViewById(R.id.test_image);
text = (TextView)findViewById(R.id.RGB);
image.setImageBitmap(bMap);
int pix = bMap.getPixel(10, 10);
int h[] = RGBreturn(pix);
text.setText("A= "+Integer.toString(h[3])+" R= "+Integer.toString(h[0])+" G= "+Integer.toString(h[1])+" B= "+Integer.toString(h[2]));
}
Como dije para las pruebas ando utilizando el pixel 10,10; aquí esta la imagen de prueba de que vamos por buen camino.



Y pues ya puliendo unos detalles con los temas que cree anteriormente llegue hasta esto.



Hice Touch en la parte donde sabia el valor que les comente al inicio donde es rojo, ya probé con varias imágenes diferentes y tengo buenos resultados.

COMENTEN O PREGUNTEN SI TIENEN DUDAS CON QUE PONGAN "COMO HICISTE EN ESTE PARTE" CON ESO BASTA

Pues bueno gente nos vemos me iré a otro foro haber que sucede se cuidan bye