Salvar Screen to Bmp

Salvar Screen to Bmp

Postby fgondi » 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: Select all  Expand view
hBmp     := WndBitmap( oWnd:hWnd )
hDib     := DibFromBitmap( hBmp )
DibWrite( cFileBmp, hDib )


He probado cambiando:
Code: Select all  Expand view
hBmp     := WndBitmap( GetDeskTopWindow() )


E Incluyendo:
Code: Select all  Expand view
GloBalFree( hDib )
DeleteObject( hBmp )
Un saludo
Fernando González Diez
ALSIS Sistemas Informáticos
User avatar
fgondi
 
Posts: 694
Joined: Fri Oct 07, 2005 6:58 am
Location: Palencia, España

Re: Salvar Screen to Bmp

Postby Antonio Linares » Wed May 05, 2010 12:09 pm

Fernando,

Hazlo asi:

oWnd:SaveToBmp( cBmpFileName )
regards, saludos

Antonio Linares
www.fivetechsoft.com
User avatar
Antonio Linares
Site Admin
 
Posts: 42082
Joined: Thu Oct 06, 2005 5:47 pm
Location: Spain

Re: Salvar Screen to Bmp

Postby fgondi » Wed May 05, 2010 2:51 pm

Antonio,

Sigue dando el mismo problema
Un saludo
Fernando González Diez
ALSIS Sistemas Informáticos
User avatar
fgondi
 
Posts: 694
Joined: Fri Oct 07, 2005 6:58 am
Location: Palencia, España

Re: Salvar Screen to Bmp

Postby Antonio Linares » Wed May 05, 2010 3:32 pm

Fernando,

Usas xHarbour comercial ?
regards, saludos

Antonio Linares
www.fivetechsoft.com
User avatar
Antonio Linares
Site Admin
 
Posts: 42082
Joined: Thu Oct 06, 2005 5:47 pm
Location: Spain

Re: Salvar Screen to Bmp

Postby fgondi » Wed May 05, 2010 4:55 pm

Antonio,

No. Uso xHarbour que viene con FWH
Un saludo
Fernando González Diez
ALSIS Sistemas Informáticos
User avatar
fgondi
 
Posts: 694
Joined: Fri Oct 07, 2005 6:58 am
Location: Palencia, España

Re: Salvar Screen to Bmp

Postby fgondi » Thu May 06, 2010 3:54 pm

alguna solución?
Un saludo
Fernando González Diez
ALSIS Sistemas Informáticos
User avatar
fgondi
 
Posts: 694
Joined: Fri Oct 07, 2005 6:58 am
Location: Palencia, España

Re: Salvar Screen to Bmp

Postby Antonio Linares » Thu May 06, 2010 4: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
User avatar
Antonio Linares
Site Admin
 
Posts: 42082
Joined: Thu Oct 06, 2005 5:47 pm
Location: Spain

Re: Salvar Screen to Bmp

Postby fgondi » Fri May 07, 2010 8: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
User avatar
fgondi
 
Posts: 694
Joined: Fri Oct 07, 2005 6:58 am
Location: Palencia, España

Re: Salvar Screen to Bmp

Postby fgondi » Fri May 07, 2010 8: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
User avatar
fgondi
 
Posts: 694
Joined: Fri Oct 07, 2005 6:58 am
Location: Palencia, España

Re: Salvar Screen to Bmp

Postby Antonio Linares » Fri May 07, 2010 8: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
User avatar
Antonio Linares
Site Admin
 
Posts: 42082
Joined: Thu Oct 06, 2005 5:47 pm
Location: Spain

Re: Salvar Screen to Bmp

Postby fgondi » Fri May 07, 2010 8:42 am

Antonio,

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


Funciona correctamente
Last edited by fgondi on Fri May 07, 2010 8:50 am, edited 1 time in total.
Un saludo
Fernando González Diez
ALSIS Sistemas Informáticos
User avatar
fgondi
 
Posts: 694
Joined: Fri Oct 07, 2005 6:58 am
Location: Palencia, España

Re: Salvar Screen to Bmp

Postby fgondi » Fri May 07, 2010 8: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
User avatar
fgondi
 
Posts: 694
Joined: Fri Oct 07, 2005 6:58 am
Location: Palencia, España

Re: Salvar Screen to Bmp

Postby Antonio Linares » 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
User avatar
Antonio Linares
Site Admin
 
Posts: 42082
Joined: Thu Oct 06, 2005 5:47 pm
Location: Spain

Re: Salvar Screen to Bmp

Postby fgondi » 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: Select all  Expand view
  if( hFile = _lopen( szDibName, READ ) )


Warning W8060 C:\five\comun\dib.c 70: Possibly incorrect assignment in function DibRead
Code: Select all  Expand view
     if( hDib = fwGlobalAlloc( GMEM_MOVEABLE | GMEM_DISCARDABLE,
                                lSize = _llseek( hFile, 0, 2 ) ) )
Un saludo
Fernando González Diez
ALSIS Sistemas Informáticos
User avatar
fgondi
 
Posts: 694
Joined: Fri Oct 07, 2005 6:58 am
Location: Palencia, España

Re: Salvar Screen to Bmp

Postby Antonio Linares » Fri May 07, 2010 1: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
User avatar
Antonio Linares
Site Admin
 
Posts: 42082
Joined: Thu Oct 06, 2005 5:47 pm
Location: Spain

Next

Return to FiveWin para Harbour/xHarbour

Who is online

Users browsing this forum: No registered users and 14 guests