domingo, 11 de septiembre de 2011

Manipulando una imagen en C++

Hola gente
hoy mostramos como manipular una imagen
en lenguaje C++ utilizando el C++ Builder 6

Bueno primero la interfaz...




Luego seleccionamos el Image, nos vamos al Object Inspector y buscamos la propiedad Picture para insertar la imagen que vamos a usar...

Cargamos la imagen dando clic en Load. ¡¡¡La imagen debe ser .bmp!!!

Y luego "a mover los deditos"...

Primero vamos a cambiar los tonos de color de la imagen y mostrar el resultado en el Image2
damos doble clic en el botón con la leyenda ROJO...

void __fastcall TForm1::Button1Click(TObject *Sender)
{
        TColor color; //creamos una variable para guardar la imagen
        for(int i = 0; i < Image1->Width; i++){
                for(int j = 0; j < Image1->Height; j++){
                        //los 'for' recorren la imagen del Image1
                        //y la guardamos en la variable
                        color = Image1->Canvas->Pixels[i][j];
                        //ahora dibujamos sobre el Image2 lo del Image1
                        //pero cambiamos la intensidad del color a rojo
                        //usando hexadecimal, donde 0x es el nivel de
                        //transparencia y FF el color rojo
                        Image2->Canvas->Pixels[i][j] = color & 0xFF;
                }
        }
}
y se ve asi...

ahora vamos por el verde que es prácticamente lo mismo, solo cambiamos el color en hexadecimal...

void __fastcall TForm1::Button2Click(TObject *Sender)
{
        TColor color;
        for(int i = 0; i < Image1->Width; i++){
                for(int j = 0; j < Image1->Height; j++){
                        color = Image1->Canvas->Pixels[i][j];
                        //0x = transparencia
                        //00FF00, los dos primeros ceros son el azul
                        //al poner 00 lo "apagamos", FF activa el verde
                        //y los ultimos 00 "apagan" el rojo
                        Image2->Canvas->Pixels[i][j] = color & 0x00FF00;
                }
        }
}


y el azul lo mismo...

void __fastcall TForm1::Button3Click(TObject *Sender)
{
        TColor color;
        for(int i = 0; i < Image1->Width; i++){
                for(int j = 0; j < Image1->Height; j++){
                        color = Image1->Canvas->Pixels[i][j];
                        Image2->Canvas->Pixels[i][j] = color & 0xFF0000;
                }
        }
}



ahora vamos a mover la imagen...

void __fastcall TForm1::Button4Click(TObject *Sender)
{
        TColor color; //otra vez guardamos en esta variable
        for(int i = 0; i < Image1->Width; i++){
                for(int j = 0; j < Image1->Height; j++){
                        color = Image1->Canvas->Pixels[i][j];
                        //y en el Image2 dibujamos a partir de la posicion
                        //del ultimo pixel del Image1
                        //osea de abajo pa' arriba
                        Image2->Canvas->Pixels[Image1->Width - i][Image1->Height - j] = color;
                        //Image2->Stretch;
                }
        }
}



sigue el efecto de espejo...

void __fastcall TForm1::Button5Click(TObject *Sender)
{
        TColor color; //la misma... variable
        for(int i = 0 ; i < Image1->Width; i++){
                for(int j = 0; j < Image1->Height; j++){
                        color = Image1->Canvas->Pixels[i][j];
                        //ahora el eje y(j) se mentiene, el chiste
                        //es que ahora dibujamos en el eje x(i) del Image2
                        //de derecha a izquierda
                        Image2->Canvas->Pixels[Image1->Width - i][j] = color;
                }
        }
}


y por ultimo acostar la imagen...

void __fastcall TForm1::Button6Click(TObject *Sender)
{
        for(int i = 0; i < Image1->Width; i++){
                for(int j = 0; j < Image1->Height; j++)
                {
                        //sobre el eje x(i) del Image2 dibujamos lo del
                        //eje y(j) del Image1 y en el eje y dibujamos x
                        Image2->Canvas->Pixels[j][Image2->Height-i] = Image1->Canvas->Pixels[i][j];
                }
        }
}
//---------------------------------------------------------------------------

void __fastcall TForm1::Button7Click(TObject *Sender)
{
        for(int i = 0; i < Image1->Width; i++){
                for(int j = 0; j < Image1->Height; j++)
                {
                        //lo mismo del anterior pero pal' otro lado
                        Image2->Canvas->Pixels[Image2->Height-j][i]=Image1->Canvas->Pixels[i][j];
                }
        }
}
//---------------------------------------------------------------------------





bueno eso es todo
este es mi primer post sientete libre de echarle tierra (comenta)
espero sea de ayuda
nos vemos al rato








No hay comentarios:

Publicar un comentario