Obtener el color RGB de una imagen en Android.

Nueva Sección
15 diciembre, 2014
¿ Qué es Bootstrap ?
6 abril, 2015

Screenshot_2014-05-16-18-16-44 Motivado por un usuario que ha estado usando mi App ColorMaker, es que hago es post.

Me ha preguntado como se puede obtener el código RGB de una imagen con lo que simplemente le voy a detallar cual es el código que he utilizado.

En primer lugar voy a considerar que han logrado obtener la imagen ya sea por la cámara o por la galería y la han colocado en un ImageView.

Una vez obtenida la imagen en pantalla es tan simple como definir el método setOnTouchListener sobre el imageView y es ahi donde deben definir el código para obtener el ID del color.

		imgv = (ImageView) findViewById(R.id.imageView1);
        Bitmap bmpResult = ((BitmapDrawable)imgv.getDrawable()).getBitmap();
		imgv.setOnTouchListener(new View.OnTouchListener() {

			@Override
			public boolean onTouch(View v, MotionEvent event) {
				try{
                    // Obtener las coordenadas sobre el imageView
					int x = (int)event.getX();
					int y = (int) event.getY();

					//Limitar x, y dentro del bitmap
					if(x < 0){
						x = 0;
					}else if(x > bmpResult.getWidth()-1){
						x = bmpResult.getWidth()-1;
					}
					if(y < 0){
						y = 0;
					}else if(y > bmpResult.getHeight()-1){
						y = bmpResult.getHeight()-1;
					}
                    // Obtener el codigo decimal del pixel
					int pixel = bmpResult.getPixel(x,y);
					int rval = Color.red(pixel);
					int gval = Color.green(pixel);
					int bval = Color.blue(pixel);
					int iColor = Color.argb(255, rval, gval, bval);

					txtRes.setBackgroundColor(iColor);

                    // Calculo el CMYK Esto es de YAPA
                    double rr = rval/ 255.0000;
                    double gg = gval / 255.0000;
                    double bb = bval / 255.0000;
                    double black = 1.0000 - Math.max(rr,Math.max(gg,bb));
                    double  cyan = (1-rr-black) / (1-black);
                    double magenta = (1-gg-black) / (1-black);
                    double yellow = (1-bb-black) / (1-black);


                    // Muestro el resultado en HEXA
					System.out.println(String.format("RGB; #%06X   C:%.4f M:%.4f Y:%.4f K:%.4f", (0xFFFFFF & iColor),cyan,magenta,yellow,black));
				}catch(Exception e){
					System.out.println("Error en pixel" + e.toString());
				}
				return true;
			}
		});

Como verán , le he agregado como calcular el CMYK correspondiente, ya que he aprovechado para actualizar ColorMaker.

Espero les sea de utilidad.

Comments are closed.