CLR: .Net / Mono / Boo / Otros CLR > C#
modificar colores especificos de una pictureBox
computadora:
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:
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# --- Color buscado = <COLORBUSCADOPARCAMBIAR>; Color nuevoColor = <NUEVOCOLOR>; Bitmap b=<ASIGNACION>; for (int i = 0; i <= b.PhysicalDimension .Width-1; i++) { for (int j = 0; j <= b.PhysicalDimension .Height-1; j++) { if (b.GetPixel(i, j).ToArgb().Equals (buscado)) { b.SetPixel(i, j, nuevoColor); } } }//ya aqui el bitmap es distinto
Este e el cofigo real:
--- Código: C# ---using System;using System.Collections.Generic;using System.ComponentModel;using System.Data;using System.Drawing;using System.Linq;using System.Text;using System.Windows.Forms; namespace ModificarLosColores{ public partial class Form1 : Form { Bitmap b = null; public Form1() { InitializeComponent(); b = (Bitmap)pictureBox1.Image; } private void pictureBox1_MouseMove(object sender, MouseEventArgs e) { try { Color MiColor = b.GetPixel(e.X, e.Y); pictureBox2.BackColor = MiColor; } catch { } } private void pictureBox1_MouseDown(object sender, MouseEventArgs e) { try { Color MiColor = b.GetPixel(e.X, e.Y); pictureBox3.BackColor = MiColor; } catch { } } private void button1_Click(object sender, EventArgs e) { Color buscado = pictureBox3.BackColor; Color cambio = Color.FromArgb(255, (int)numericUpDown1.Value, (int)numericUpDown2.Value, (int)numericUpDown3.Value); 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; } }}
computadora:
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:
Algo como esto?
--- Código: C# ---int R=Tucolor.toArgb.R;int G=Tucolor.toArgb.G;int B=TUcolor.toArgb.B;
computadora:
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
Navegación
[#] Página Siguiente
Ir a la versión completa