Modificar el color de una imagen con el array pixels[]

yohsb
Vamos a empezar haciendo una gilipollez: vamos a sustituir cada píxel de una imagen por otro exactamente igual.

  1. //importamos una imagen
  2. PImage img;
  3. img = loadImage("yo.jpg");
  4. size(img.width, img.height);
  5. image(img, 0, 0);
  6.  
  7. //cargamos todos sus píxeles
  8. loadPixels();
  9. for (int i = 0; i < pixels.length; i++) {
  10.   //leemos el valor de los canales rojo, verde y azul de cada uno
  11.   float r = red(pixels[i]);
  12.   float g = green(pixels[i]);
  13.   float b = blue(pixels[i]);
  14.   //asignamos esos mismos valores a cada píxel
  15.   pixels[i] = color(r, g, b);
  16. }
  17. //actualizamos
  18. updatePixels();

Lo dicho, una tontería: hemos sustituido una imagen por otra exactamente igual… pero, y ahí está la diferencia, formada por elementos que podemos modificar. Al almacenar los valores de cada canal de color en una variable podemos modificar esos valores. Por ejemplo, ¿qué pasaría si reducimos el valor del canal azul a la mitad?

pixels[i] = color(r, g, b/2);

¿O si cambiamos los valores de orden?

pixels[i] = color(g, b, r);

¿O, volvámonos locos, si cambiamos el modo de color a HSB y asignamos a esos canales los valores RGB?

Hay mil transformaciones que podemos efectuar simplemente leyendo y modificando colores. Aquí tenéis un par de enlaces que lo explican:

  1. Hola, disculpa, cargo tu codigo en mi laptop y me dice que en size() tengo error ya que solo debo escribir numeros, sabes como lo puedo solucionar?

    Reply
    • Hola Alejandra.
      Eso es porque seguramente estás usando Procesing 3, que no permite usar variables en size(). En mi código aparece ‘size(img.width, img.height);’, es decir que la ventana de la aplicación toma las dimensiones de la variable img (la foto). Si la ejecutas con Processing 2, por ejemplo, funcionará. Para que puedas usarlo en Processing 3, sustituye las variables escritas dentro del paréntesis por las dimensiones en píxeles (ancho, alto) de la imagen que quieres procesar.

      Reply

Leave a Comment.