• Jueves 28 de Marzo de 2024, 14:25

Autor Tema:  modificar colores especificos de una pictureBox  (Leído 6588 veces)

computadora

  • Nuevo Miembro
  • *
  • Mensajes: 11
    • Ver Perfil
modificar colores especificos de una pictureBox
« en: Viernes 23 de Abril de 2010, 04:18 »
0
lo que quiero es poder modificar los colores ( rojo, azul, verde) de mi picturebox1
especificamente, quiero saber como recorer el picturebox1 para que dentro de su color (RGB) le pueda modificar, por decir el azul y se cambien algunos colores

hasta ahora tengo un radiobutton para cada color, y un combobox que mide el nivel (1-2-3) de cambio a aplicarse pero no puedo avanzar porque no se lo anterior

gracias de antemano :)

Jeysscarr

  • Miembro MUY activo
  • ***
  • Mensajes: 134
  • Nacionalidad: co
    • Ver Perfil
Re: modificar colores especificos de una pictureBox
« Respuesta #1 en: Viernes 23 de Abril de 2010, 06:09 »
0
Yo hice como un minipromita para ver como se hacia por tu pregunta, y si se puede.... aqui esta mas o menos la idea principal
conviertes la imagen a un bitmap
estableces que color quieres cambiar y determinas que nuevo valor, despues recorres la matriz de pixeles... por eso el nombre "mapa de bits"
con respecto a su tamaño y en donde encuentres coincidencia haces el cambio. Te dejo una imagen de lo que me idee.. espero te sirva
Código: C#
  1.  
  2.                 Color buscado = <COLORBUSCADOPARCAMBIAR>;
  3.                 Color nuevoColor = <NUEVOCOLOR>;
  4.                  
  5.                 Bitmap b=<ASIGNACION>;
  6.  
  7.                 for (int i = 0; i <= b.PhysicalDimension .Width-1; i++)
  8.                 {
  9.                     for (int j = 0; j <= b.PhysicalDimension .Height-1; j++)
  10.                     {
  11.                         if (b.GetPixel(i, j).ToArgb().Equals (buscado))
  12.                         {
  13.                             b.SetPixel(i, j, nuevoColor);
  14.                            
  15.                         }
  16.                     }
  17.                 }//ya aqui el bitmap es distinto
  18.  
  19.  

Este e el cofigo real:
Código: C#
  1. using System;
  2. using System.Collections.Generic;
  3. using System.ComponentModel;
  4. using System.Data;
  5. using System.Drawing;
  6. using System.Linq;
  7. using System.Text;
  8. using System.Windows.Forms;
  9.  
  10. namespace ModificarLosColores
  11. {
  12.     public partial class Form1 : Form
  13.     {
  14.         Bitmap b = null;
  15.         public Form1()
  16.         {
  17.             InitializeComponent();
  18.             b = (Bitmap)pictureBox1.Image;
  19.         }
  20.  
  21.        
  22.         private void pictureBox1_MouseMove(object sender, MouseEventArgs e)
  23.         {
  24.             try
  25.             {
  26.  
  27.                 Color MiColor = b.GetPixel(e.X, e.Y);
  28.                 pictureBox2.BackColor = MiColor;
  29.             }
  30.             catch
  31.             {
  32.             }
  33.  
  34.         }
  35.  
  36.         private void pictureBox1_MouseDown(object sender, MouseEventArgs e)
  37.         {
  38.             try
  39.             {
  40.  
  41.                 Color MiColor = b.GetPixel(e.X, e.Y);
  42.                 pictureBox3.BackColor = MiColor;
  43.             }
  44.             catch
  45.             {
  46.             }
  47.         }
  48.  
  49.         private void button1_Click(object sender, EventArgs e)
  50.         {
  51.          
  52.                 Color buscado = pictureBox3.BackColor;
  53.                 Color cambio = Color.FromArgb(255, (int)numericUpDown1.Value, (int)numericUpDown2.Value, (int)numericUpDown3.Value);
  54.                 for (int i = 10; i <= b.PhysicalDimension .Width-10; i++)
  55.                 {
  56.                     for (int j = 10; j <= b.PhysicalDimension .Height-10; j++)
  57.                     {
  58.                         if (b.GetPixel(i, j).ToArgb().Equals (buscado.ToArgb ()))
  59.                         {
  60.                             b.SetPixel(i, j, cambio);
  61.                            
  62.                         }
  63.                     }
  64.                 }
  65.                 pictureBox1.Image = b;
  66.            
  67.            
  68.         }
  69.     }
  70. }
  71.  
  72.  
El mensaje contiene 2 archivos adjuntos. Debes ingresar o registrarte para poder verlos y descargarlos.
Nuestro poder está creciendo mas rápido que nuestra sabiduria

computadora

  • Nuevo Miembro
  • *
  • Mensajes: 11
    • Ver Perfil
Re: modificar colores especificos de una pictureBox
« Respuesta #2 en: Viernes 23 de Abril de 2010, 17:01 »
0
muchisimas gracias por tu ayuda, me sirvio mucho

sola una duda, si quisiera guardar en un int diferentes los valores red, green y blue del color seleccionado, como lo podria hacer??

gracias nuevamente

Jeysscarr

  • Miembro MUY activo
  • ***
  • Mensajes: 134
  • Nacionalidad: co
    • Ver Perfil
Re: modificar colores especificos de una pictureBox
« Respuesta #3 en: Viernes 23 de Abril de 2010, 17:07 »
0
Algo como esto?

Código: C#
  1. int R=Tucolor.toArgb.R;
  2. int G=Tucolor.toArgb.G;
  3. int B=TUcolor.toArgb.B;
  4.  
Nuestro poder está creciendo mas rápido que nuestra sabiduria

computadora

  • Nuevo Miembro
  • *
  • Mensajes: 11
    • Ver Perfil
Re: modificar colores especificos de una pictureBox
« Respuesta #4 en: Viernes 23 de Abril de 2010, 17:32 »
0
gracias, era lo que buscaba
solo que lo que puse es lo siguiente:

  int red = aCambiar.R;
                        int green = aCambiar.G;
                        int blue = aCambiar.B;

y funciona bien, solo que esto lo puse en un pictureBox1_MouseMove y necesito usar el valor de red en button4_Click
que puedo hacer?

muchisimas gracias

Jeysscarr

  • Miembro MUY activo
  • ***
  • Mensajes: 134
  • Nacionalidad: co
    • Ver Perfil
Re: modificar colores especificos de una pictureBox
« Respuesta #5 en: Viernes 23 de Abril de 2010, 17:36 »
0
Primero que todo las variables enteras R,G,B declaralas a nivel general de la clase como static, inicializalas a 0 en el Form_Load, asignales los valores como estas haciendo en el mouse down, asi podras usarlas en cualquier parte de la aplicacion a nivel del form....
No lo hagas en el mouse move porque jeje cuando quieras ir con el mouse a darle click al button4 pues obviamente se te van a perder los valores RGB, por eso guardalas en el mousedown...
Nuestro poder está creciendo mas rápido que nuestra sabiduria

computadora

  • Nuevo Miembro
  • *
  • Mensajes: 11
    • Ver Perfil
Re: modificar colores especificos de una pictureBox
« Respuesta #6 en: Domingo 25 de Abril de 2010, 03:22 »
0
muchisimas gracias de nuevo :)
me surgio otra duda, no hay forma que dentro de donde puse los asteriscos se pueda tener los valores rgb del pixel en el cual esta haciendo el recorido??
algo asi como lo que me mostraste anteriormente
int red = aCambiar.R;
int green = aCambiar.G;
int blue = aCambiar.B;


#                 for (int i = 10; i <= b.PhysicalDimension .Width-10; i++)
#                 {
#                     for (int j = 10; j <= b.PhysicalDimension .Height-10; j++)
#                     {
#                         if (b.GetPixel(i, j).ToArgb().Equals (buscado.ToArgb ()))
#                         {
***********************
#                             b.SetPixel(i, j, cambio);
#                            
#                         }
#                     }
#                 }
#                 pictureBox1.Image = b;
#            
gracias nuevamente :)

Jeysscarr

  • Miembro MUY activo
  • ***
  • Mensajes: 134
  • Nacionalidad: co
    • Ver Perfil
Re: modificar colores especificos de una pictureBox
« Respuesta #7 en: Domingo 25 de Abril de 2010, 13:35 »
0
En programación casi todo se puede hacer... mira cuando yo accedo a la propiedad GetPixel del birmap "b" puedo hacer varias cosas con eso:

1. Asignar su valor a un color (aunque yo directamente lo comparo sin asignarlo)
2. Asignando o no este valor sacar los valores RGB, en ambas formas respectivamente seria asi:

1ª Forma:
Color ColorActualRecorrido=b.Getpixel(i,j).ToArgb();
De aqui puedo hacer esto: ColorActualRecorrido.R, ColorActualRecorrido.G, ColorActualRecorrido.B

2ª Forma:
Hacerlo directamente: b.Getpixel(i,j).ToArgb().R, b.Getpixel(i,j).ToArgb().G, b.Getpixel(i,j).ToArgb().B
en este caso si usamos la primera forma en el caso anterior seria algo como esto:

Código: C#
  1.  
  2. Color ColorActual=null;
  3.  for  (int i = 10; i <= b.PhysicalDimension .Width-10; i++)
  4.                  {
  5.                      for (int j = 10; j <= b.PhysicalDimension .Height-10; j++)
  6.                      {
  7.                          ColorActual=b.GetPixel(i, j).ToArgb();
  8.                          R=ColorActual.R;G=ColorActual.G;B=ColorActual.B;
  9.                          if (ColorActual.Equals (buscado.ToArgb ()))
  10.                          {
  11.                              b.SetPixel(i, j, cambio);
  12.                             
  13.                          }
  14.                      }
  15.                  }
  16.  
Nuestro poder está creciendo mas rápido que nuestra sabiduria

computadora

  • Nuevo Miembro
  • *
  • Mensajes: 11
    • Ver Perfil
Re: modificar colores especificos de una pictureBox
« Respuesta #8 en: Domingo 25 de Abril de 2010, 19:20 »
0
gracias, eso era lo que buscaba :)
ahora lo que quiero hacer es que todo lo del picturebox le haga una modificacion a sus rojos (rgb)

dejame te explico como lo estoy usando
for (int i = 0; i <= bmp.PhysicalDimension.Width - 1; i++)
                    {
                        for (int j = 0; j <= bmp.PhysicalDimension.Height - 1; j++)
                        {
                            ColorActual = b.GetPixel(i, j); //guardo los colores que recorro
                            red1 = ColorActual.R; los pongo en variables
                            green1 = ColorActual.G;
                            blue1 = ColorActual.B;
                            green1 =+1;      //modifico solo el verde
                            cambioV = Color.FromArgb(255,red1, green1, blue1);        //lo guardo todo en un nuevo color
                            b.SetPixel(i, j, cambioV);       //lo uso en el picture box
                        }
                    }

pero lo que me hace es que, por ejemplo, el color amarillo me lo convierte en rojo y lo blanco a magenta
y el resultado deberia de ser verde amarillesco y tal vez verde palido, que puedo hacer??

muchisimas gracias por todo tu tiempo y perdon por las molestias :hola: