Manipulador de Bitmaps en C++ Builder

En los ejemplos anteriores encontraran que los programas desarrollados no vienen acompañados de los EXEs respectivos pues no por que no deseamos ponerlos, se debe a que C++ Builder genera un EXE que pesa 400kb así solo tenga un Botón, eso cuando el EXE es totalmente independiente, existe un modo de apañar ese error, desde ahora enviaremos EXEs que dependan de la VCL50 , para ello necesitaran de C++ Builder 5.0 instalado en su maquina, eso ayudara a que los EXEs promedios pesen 50kb, y no habrá problemas para que se puedan descargar el código fuente y el EXE demostrativo.

DibImages.jpg
Programa ejecutándose


Ahora Presentamos una forma practica de manipulación de un Bitmap desde código fuente, no necesita de API, aquí te daremos una perspectiva para trabajar con BMPs y comprender su estructura.
Ahora bien.. como se aprecia en la parte superior, de este modo puedes manipular un Bitmap que se ha cargado en un Control TImage pero la maravilla radica en que se manipula Byte a Byte, el contenido de la Matriz de Puntos, se lee una linea, que posteriormente se modificara en el destino, cambiando la ubicación de los Bytes, el Red por Green, Blue por Green, entre otras, en un próximo programa les enseñaremos como manipular un Bitmap desde Nativo C/C++ 3.1 de Borland. ahora puedes guiarte con este código fuente :

Code: Seleccionar todo
  1.  void   TDlgMain::fncInvertirImagen( int Cual )

  2.  {

  3.    //make sure both images are in 24bit pixel format

  4.    ImgProDemo->Picture->Bitmap->PixelFormat=pf24bit;

  5.    ImgProSale->Picture->Bitmap->PixelFormat=pf24bit;

  6.  

  7.     //copy the source pixels to the destination bitmap

  8.    for (int row1=0;row1<ImgProDemo->Height;row1++)

  9.    {

  10.      BYTE* rowPtr1=(BYTE*)ImgProDemo->Picture->Bitmap->ScanLine[row1];

  11.  

  12.      for (int col1=0;col1<ImgProDemo->Width;col1++)

  13.      {

  14.      //get pointer to the current pixel in the source image

  15.      BYTE* pixelPtr1 = rowPtr1-col1*3;

  16.  

  17.      //get pointer to the current pixel in the destination image

  18.      BYTE* rowPtr2   = (BYTE*)ImgProSale->Picture->Bitmap->ScanLine[row1];

  19.      BYTE* pixelPtr2 = rowPtr2 - col1*3+ImgProSale->Width*3;

  20.  

  21.      // Here change the position at pixels

  22.      if( Cual==0 )

  23.      {

  24.        pixelPtr2[0]=pixelPtr1[ 1 ];

  25.        pixelPtr2[1]=pixelPtr1[ 2 ];

  26.        pixelPtr2[2]=pixelPtr1[ 0 ];

  27.      }

  28.   }

  29.  }

Archivos Adjuntos

Otros Artículos en esta sección

¿Alguna duda? Sientete libre de hacer tus pruntas en nuestro:
foro de Programación »