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

Moderador: yalmar

Foro cerrado salvo peticion.

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

Notapor razor7 » Vie Abr 20, 2007 10:25 pm

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

Código: Seleccionar todo
  1.  

  2. void __fastcall Form1::test12()

  3. {

  4.   printf("\n------------------------------\n");

  5.   printf("test12 begin :\n");

  6.   printf("->test image  : create a sample image\n\n");

  7.   PFBitmap32 imageCreated = image_createImage( 256, 256 );

  8.   if( imageCreated != NULL ){

  9.     TFColor32 *src = imageCreated->Bits;

  10.     for(int row=0; rowHeight; row++){

  11.       for(int col=0; colWidth; col++){

  12.       PFColor32 color = src;

  13.       *color = image_gray32( row );

  14.       src++;

  15.       }

  16.     }

  17.     // save image created

  18.     helper_saveImage( imageCreated, "testFiltersDllC_output_test12.jpg" );

  19.     // dispose

  20.     image_freeImage( imageCreated );

  21.   }

  22.   printf("test12 end.\n\n");

  23. }

  24.  




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 » Sab Abr 21, 2007 6:19 am

Hola,

una forma simple sería,

Código: Seleccionar todo
  1.  

  2. for (unsigned i = 0; i < row; ++i){

  3.     for (unsigned j = 0; j < col; ++col){

  4.       ...

  5.       Image1->Canvas->Pixels[i][j] = image_gray32( row*j + col );

  6.       ++src;

  7.       ...

  8.     }

  9. }

  10.  



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
Colaborador
Colaborador
 
Mensajes: 264
Registrado: Mié Jun 09, 2004 4:14 pm
Ubicación: Brasil


Notapor razor7 » Sab Abr 21, 2007 9:16 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
  1.  

  2.  

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

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

  5.  

  6.                                 imgSalida->Canvas->Pixels[fila][columna] = image_gray32( fila );

  7.                         }

  8.                 }

  9.  

[/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 1 invitado