FiveTech Support Forums

FiveWin / Harbour / xBase community
Board index FiveWin para Harbour/xHarbour Salvar Screen to Bmp
Posts: 694
Joined: Fri Oct 07, 2005 06:58 AM
Salvar Screen to Bmp
Posted: Wed May 05, 2010 11:06 AM
No consiguo que se grabe la pantalla en un Bmp, y en versiones anteriores me funcionaba correctamente.

Ahora genera el bmp, pero este no es legible.

Este es el código
Code (fw): Select all Collapse
hBmp     := WndBitmap( oWnd:hWnd )
hDib     := DibFromBitmap( hBmp )
DibWrite( cFileBmp, hDib )


He probado cambiando:
Code (fw): Select all Collapse
hBmp     := WndBitmap( GetDeskTopWindow() )


E Incluyendo:
Code (fw): Select all Collapse
GloBalFree( hDib )
DeleteObject( hBmp )
Un saludo

Fernando González Diez

ALSIS Sistemas Informáticos
Posts: 44162
Joined: Thu Oct 06, 2005 05:47 PM
Re: Salvar Screen to Bmp
Posted: Wed May 05, 2010 12:09 PM

Fernando,

Hazlo asi:

oWnd:SaveToBmp( cBmpFileName )

regards, saludos

Antonio Linares
www.fivetechsoft.com
Posts: 694
Joined: Fri Oct 07, 2005 06:58 AM
Re: Salvar Screen to Bmp
Posted: Wed May 05, 2010 02:51 PM

Antonio,

Sigue dando el mismo problema

Un saludo

Fernando González Diez

ALSIS Sistemas Informáticos
Posts: 44162
Joined: Thu Oct 06, 2005 05:47 PM
Re: Salvar Screen to Bmp
Posted: Wed May 05, 2010 03:32 PM

Fernando,

Usas xHarbour comercial ?

regards, saludos

Antonio Linares
www.fivetechsoft.com
Posts: 694
Joined: Fri Oct 07, 2005 06:58 AM
Re: Salvar Screen to Bmp
Posted: Wed May 05, 2010 04:55 PM

Antonio,

No. Uso xHarbour que viene con FWH

Un saludo

Fernando González Diez

ALSIS Sistemas Informáticos
Posts: 694
Joined: Fri Oct 07, 2005 06:58 AM
Re: Salvar Screen to Bmp
Posted: Thu May 06, 2010 03:54 PM

alguna solución?

Un saludo

Fernando González Diez

ALSIS Sistemas Informáticos
Posts: 44162
Joined: Thu Oct 06, 2005 05:47 PM
Re: Salvar Screen to Bmp
Posted: Thu May 06, 2010 04:53 PM

Fernando,

Por favor, abre el BMP que no se visualiza correctamente, con un editor binario (el UEStudio, por ejemplo lo hace) y mira que cuatro bytes tienes al comienzo del BMP. Luego compáralos con un BMP que se visualice bien, y pon aqui los resultados, gracias

regards, saludos

Antonio Linares
www.fivetechsoft.com
Posts: 694
Joined: Fri Oct 07, 2005 06:58 AM
Re: Salvar Screen to Bmp
Posted: Fri May 07, 2010 08:16 AM

Antonio,

Bmp visualizado correctamente

42 4D 8E 60 01 (BMŽ`)

Bmp Incorrecto

4D 42 36 80 69 (MB6€i)

Un saludo

Fernando González Diez

ALSIS Sistemas Informáticos
Posts: 694
Joined: Fri Oct 07, 2005 06:58 AM
Re: Salvar Screen to Bmp
Posted: Fri May 07, 2010 08:19 AM

Al cambiar en el bmp incorrecto el orden de los bytes

42 4D 36 80 69 (BM6€i)

Reconoce la imagen y la muestra correctamente.

Un saludo

Fernando González Diez

ALSIS Sistemas Informáticos
Posts: 44162
Joined: Thu Oct 06, 2005 05:47 PM
Re: Salvar Screen to Bmp
Posted: Fri May 07, 2010 08:35 AM

Fernando,

La función DibWrite() en FWH\source\winapi\dib.c rellena la siguiente estructura:

bmf.bfType = 'BM';
bmf.bfSize = sizeof( bmf ) + lSize;
bmf.bfReserved1 = 0;
bmf.bfReserved2 = 0;
bmf.bfOffBits = sizeof( bmf ) + ( FARP ) Bits - ( FARP ) Info;

escribiéndola a continuación a disco:
_hwrite( hBmp, ( const char * ) &bmf, sizeof( bmf ) );

lo que no comprendo es cómo ó por que esos dos primeros bytes 'BM' se invierten :-S
Se agradece cualquier sugerencia :-)

regards, saludos

Antonio Linares
www.fivetechsoft.com
Posts: 694
Joined: Fri Oct 07, 2005 06:58 AM
Re: Salvar Screen to Bmp
Posted: Fri May 07, 2010 08:42 AM
Antonio,

Lo que si he probado es si sólo cambio el orden de los 2 primeros caracteres
Code (fw): Select all Collapse
    bmf.bfType      = 'MB';
   bmf.bfSize      = sizeof( bmf ) + lSize;
   bmf.bfReserved1 = 0;
   bmf.bfReserved2 = 0;
   bmf.bfOffBits   = sizeof( bmf ) + ( FARP ) Bits - ( FARP ) Info;


Funciona correctamente
Un saludo

Fernando González Diez

ALSIS Sistemas Informáticos
Posts: 694
Joined: Fri Oct 07, 2005 06:58 AM
Re: Salvar Screen to Bmp
Posted: Fri May 07, 2010 08:45 AM

Antonio,

Al compiar dib.c salta estos warning

Warning W8060 C:\FWH\source\winapi\dib.c 68: Possibly incorrect assignment in function DibRead
Warning W8060 C:\FWH\source\winapi\dib.c 70: Possibly incorrect assignment in function DibRead
Warning W8098 C:\FWH\source\winapi\dib.c 309: Multi-character character constant in function DibWrite

El tercero, el de la línea 309, hace referencia a bmf.bfType = 'BM';

En c estoy muy pez y no se si por ahi pueden ir los tiros

Un saludo

Fernando González Diez

ALSIS Sistemas Informáticos
Posts: 44162
Joined: Thu Oct 06, 2005 05:47 PM
Re: Salvar Screen to Bmp
Posted: Fri May 07, 2010 10:11 AM

Fernando,

Muchisimas gracias! :-)

Se me habian pasado esos warnings. Haz este cambio:

bmf.bfType = 0x4D42;

y compila dib.c nuevamente, y asi debería solucionarse :-)

regards, saludos

Antonio Linares
www.fivetechsoft.com
Posts: 694
Joined: Fri Oct 07, 2005 06:58 AM
Re: Salvar Screen to Bmp
Posted: Fri May 07, 2010 10:31 AM
Antonio,

Con ese cambio, funcionando correctamente.


Los otros 2 warnings pertenecen a la funcion DibRead

Warning W8060 C:\five\comun\dib.c 68: Possibly incorrect assignment in function DibRead
Code (fw): Select all Collapse
   if( hFile = _lopen( szDibName, READ ) )


Warning W8060 C:\five\comun\dib.c 70: Possibly incorrect assignment in function DibRead
Code (fw): Select all Collapse
      if( hDib = fwGlobalAlloc( GMEM_MOVEABLE | GMEM_DISCARDABLE,
                                lSize = _llseek( hFile, 0, 2 ) ) )
Un saludo

Fernando González Diez

ALSIS Sistemas Informáticos
Posts: 44162
Joined: Thu Oct 06, 2005 05:47 PM
Re: Salvar Screen to Bmp
Posted: Fri May 07, 2010 01:28 PM

Fernando,

Estupendo, problema solucionado :-)

Esos otros warning son "normales" pues se realizan asignaciones dentro de un if( ... )

regards, saludos

Antonio Linares
www.fivetechsoft.com