Hola chavos! Aquí estoy de nuevo para continuar realizando aplicaciones gráficas con C++ Builder.
Bien pues no se si recuerdan que hace algún tiempo realizamos una aplicación en consola en C++ en la que comprobamos el funcionamiento de los corrimientos de bits. Sino lo recuerdan pues más vale que echen un vistazo unas entradas atrás o a sus aplicaciones guardadas ya que lo utilizaremos para realizar esta aplicación. Nuestra aplicación lo que hará será colorear un PaintBox según el botón que presionemos manipulando los colores por separado y no conjuntamente con el RGB como lo veníamos haciendo anteriormente. Precisamente para poder manipular los colores por separado será para lo que utilizaremos los corrimientos en esta ocasión.
Primeramente prepararemos la Forma, la cual tenemos que cambiar el color a negro (aunque es por gusto, si desean no hacerlo pueden dejarla como esta), cambiando la propiedad color a clBlack. Los componentes que tenemos que tener son los siguientes:
-1 Shape
-1 PaintBox (el cual tenemos que colocar sobre el shape)
-3 botones
-3 Timers
La Forma en mi caso quedo de la siguiente manera (aunque saben que cada quien puede tener su propio diseño):
Bueno pues comenzamos con la programación de los componentes, primeramente lo haremos con el primer botón que contiene la cadena "ROJO", en él colocamos el siguiente código:
void __fastcall TForm1::Button1Click(TObject *Sender)
{
PaintBox1->Refresh();
Timer2->Enabled = false;
Timer3->Enabled = false;
Timer1->Enabled = true;
}
//---------------------------------------------------------------------------
Con el anterior código lo que hacemos es refrescar el PaintBox para volver a pintarlo, así mismo habilitamos el primer Timer y deshabilitamos 2 restantes. Ahora continuamos con el segundo botón que contiene la cadena "VERDE" y escribimos el código que tenemos a continuación:
void __fastcall TForm1::Button2Click(TObject *Sender)
{
PaintBox1->Refresh();
Timer1->Enabled = false;
Timer3->Enabled = false;
Timer2->Enabled = true;
}
//---------------------------------------------------------------------------
Al igual que el botón anterior primero refrescamos el PaintBox para volverlo a pintar y habilitamos el segundo Timer mientras deshabilitamos los otros 2. Luego codificamos el tercer y último botón, él cual contiene la leyenda "AZUL", el código es el siguiente:
void __fastcall TForm1::Button3Click(TObject *Sender)
{
PaintBox1->Refresh();
Timer1->Enabled = false;
Timer2->Enabled = false;
Timer3->Enabled = true;
}
//---------------------------------------------------------------------------
Este último realiza una función similar a los anteriores, refresca el PaintBox y habilita el tercer Timer para deshabilitar los otros 2. Después comenzamos con la codificación de los Timers, a continuación tenemos el Timer1:
void __fastcall TForm1::Timer1Timer(TObject *Sender)
{
int color;
randomize();
for(int i=0; i<10000; i++)
{
color = random(100) + 155;
PaintBox1->Canvas->Pixels[random(PaintBox1->Width)][random(PaintBox1->Height)] = (TColor)color;
}
}
//---------------------------------------------------------------------------
Este código como vemos lo que hace es dibujar 10,000 pixeles en algún lugar aleatorio dentro del PaintBox. El color lo definimos con números aleatorios entre 0 y 100 y luego le sumamos 155 para asegurarnos de obtener una tonalidad en rojo. Ahora codificamos el Timer2:
void __fastcall TForm1::Timer2Timer(TObject *Sender)
{
int color;
randomize();
for(int i=0; i<10000; i++)
{
color = random(100)+155;
color <<= 8;
PaintBox1->Canvas->Pixels[random(PaintBox1->Width)][random(PaintBox1->Height)] = (TColor)color;
}
}
//---------------------------------------------------------------------------
El código es parecido al anterior ya que igualmente dibujamos pixeles aleatoriamente dentro del PaintBox. Solo que en este botón el color además de definirlo con un número aleatorio y sumarle 155, le realizamos un corrimiento de 8 bits hacia la izquierda, para mover todos los bits hacia la izquierda y de esa manera cambiar todas las tonalidades de rojo a verde. Finalmente codificamos el Timer3:
void __fastcall TForm1::Timer3Timer(TObject *Sender)
{
int color;
randomize();
for(int i=0; i<10000; i++)
{
color = random(100)+155;
color <<= 16;
PaintBox1->Canvas->Pixels[random(PaintBox1->Width)][random(PaintBox1->Height)] = (TColor)color;
}
}
//---------------------------------------------------------------------------
Con este código se realiza una función similar a la anterior, calculando primero un número aleatorio y luego realizandole un corrimiento de 16 bits a la izquierda para asegurarnos de cambiar todos los colores rojos a azules.
Para terminar solo compilamos el programa y lo corremos y observamos el resultado:
Bien amigos pues por hoy es todo espero que hayan aprendido a manipular los colores de manera independiente. Ahora que conocemos ambas maneras de manejar los colores tendremos la oportunidad de elegir que manera queremos utilizar dependiendo de cual necesitemos o cual se nos haga mas sencillo. Yo los espero en la próxima para continuar con las aplicaciones. Hasta la vista amigos!.
No hay comentarios:
Publicar un comentario