Home   Artículos   Recursos   Foros   
Artíclos recientes publicados en Latindevelopers:

Visual C++: NSDoubleEdit: Un control para el manejo de números decimales en Visual C++.
Visual C++: Implementando una Calculadora en Visual C++
Visual C++: CCommandLine: Una clase para el uso de la linea de comando
Visual C++: Una clase para el manejo del Registro


Pasar un mapa de bits a un TImage, TBitmap o TCanvas

Trucos y Consejos con respecto al Lenguaje C++ Builder.

Moderador: yalmar

Pasar un mapa de bits a un TImage, TBitmap o TCanvas

Notapor razor7 el Vie Abr 20, 2007 10:24 pm

El tema es asi...por ejemplo te escribo este codigo

Código: Seleccionar todo
void __fastcall Form1::test12()
{
  printf("\n------------------------------\n");
  printf("test12 begin :\n");
  printf("->test image  : create a sample image\n\n");
  PFBitmap32 imageCreated = image_createImage( 256, 256 );
  if( imageCreated != NULL ){
    TFColor32 *src = imageCreated->Bits;
    for(int row=0; rowHeight; row++){
      for(int col=0; colWidth; col++){
      PFColor32 color = src;
      *color = image_gray32( row );
      src++;
      }
    }
    // save image created
    helper_saveImage( imageCreated, "testFiltersDllC_output_test12.jpg" );
    // dispose
    image_freeImage( imageCreated );
  }
  printf("test12 end.\n\n");
}



Si te fijas:

1. Hay una imagen "imageCreated" que es del tipo "PFBitmap32"
2. Accedo a sus pixels a travez de un puntero "*src" del tipo "TFColor32"
3. En la iteracion para recorrer la matriz de bits de la imagen, podras ver que a cada pixel se le asigna un color gris creciente a travez de "*color = image_gray32( row );"
4. Luego de esto, en la variable imageCreated tengo los pixels modificados que se guardan a un archivo con la sentencia "helper_saveImage( imageCreated, "testFiltersDllC_output_test12.jpg" );"

La pregunta concreta es: ¿Como puedo hacer para que luego de creada esa imagen, pueda asignar cada pixel de la "imageCreated" a cada pixel de un TBitmap o a un TImage o a cualquier tipo de imagen en C++ Builder?

por ejemplo, si hago esto canvas->Bitmap = imageCreated me da error...

Gracias por las sugerencias...!!!
Avatar de Usuario
razor7
Novato
Novato
 
Mensajes: 8
Registrado: Vie Abr 20, 2007 10:17 pm

Re: Pasar un mapa de bits a un TImage, TBitmap o TCanvas

Notapor yalmar el Sab Abr 21, 2007 6:19 am

Hola,

una forma simple sería,

Código: Seleccionar todo
for (unsigned i = 0; i < row; ++i){
    for (unsigned j = 0; j < col; ++col){
      ...
      Image1->Canvas->Pixels[i][j] = image_gray32( row*j + col );
      ++src;
      ...
    }
}


Es por que PFBitmap no es compatible, entonces una forma es copiando pixel por pixel, talvez se pueda hacer con Canvas->Brush->Bitmap->ScanLine y tambien con Canvas->Brush->Bitmap->Assign

Salu2.
Avatar de Usuario
yalmar
Programador Experimentado
Programador Experimentado
 
Mensajes: 252
Registrado: Mié Jun 09, 2004 4:13 pm
Ubicación: Brasil

Notapor razor7 el Sab Abr 21, 2007 9:15 am

Hola, gracisas por la sugerencia, por lo menos ahora se como acceder a la matriz de pixeles.

Esto funciona pero solamente genera una imagen ruidosa, cuando deberia generar una imagen nitida y clara, te paso una captura de pantalla.

Si es posible, ¿podrian ayudarme a generar verdaderamente la imagen?

Muchisimas Gracias....

Les paso estas capturas de pantalla:
Imagen generada...Imagen
Imagen que deberia mostrarse:Imagen


Código: Seleccionar todo

      for (unsigned fila = 0; fila <imageLoaded>Height-1; fila++){
         for (unsigned columna = 0; columna <imageLoaded>Width-1; columna++){

            imgSalida->Canvas->Pixels[fila][columna] = image_gray32( fila );
         }
      }
[/code]
Avatar de Usuario
razor7
Novato
Novato
 
Mensajes: 8
Registrado: Vie Abr 20, 2007 10:17 pm


Volver a C++ Builder

¿Quién está conectado?

Usuarios navegando por este Foro: No hay usuarios registrados visitando el Foro y 0 invitados