Holas,
es posible escalar el Bmp capturado con WndBitmap, sin llevar la imagen a disco
saludos
Marcelo
Holas,
es posible escalar el Bmp capturado con WndBitmap, sin llevar la imagen a disco
saludos
Marcelo
Holas,
encontre esta funcion StretchBlt creo que podria ser de ayuda, si tienen otra opcion me gustaria saberla
saludos
Marcelo
Con el PALBMPDRAW normal del FWH, lo puedes dibujar mas grande o mas pequeño sin necesidad de tocarlo, no tienes mas que especificar el ancho y el alto que deseas.
Si lo que quieres es guardarlo en dico con otro tamaño, efectivamente tendras que cambiarle el tamaño desde software.
Gracias a todos por responder,
Antonio, como no hay documentacion de esta funcion ResizeBmp( hBmp ), a la prueba error, la cosa es asi creo ResizeBmp( hBmp, xPixels, yPixels )
gracias por la ayuda
saludos
Marcelo
Antonio,
tienes razon, lo encontre en los fuentes winapi, muchas gracias....
Ahora otra consulta, el hecho de querer utilizar esta funcion, es crear un navegador de paginas como lo hace Acrobat Reader para el previsualizador de FW,
el problema es como crear las miniaturas desde los EMF, la opcion que veo mas aconsejable es en el rpreview.prg, pero el problema es como pasar de EMF a BMP, alguna idea? capturando el Tmetafile visualizado es posible convertirlo a BMP, pero como hacerlo todos de un tiron.
Haber si hay alguna sugerencia
saludos
Marcelo
Marcelo,
Supongo que lo mas rápido es crear un nuevo bitmap en memoria, luego seleccionarlo en un hDC y en ese hDC mostrar el EMF, con lo que ya tendriamos el bitmap modificado ![]()
local hDC := CreateCompatibleDC( 0 )
local hBmp := CreateCompatibleBitmap( hDC, nAncho, nAlto )
local hOldBmp := SelectObject( hDC, hBmp ) // ya tenemos el nuevo bitmap seleccionado en un hDC
local hEMF := GetEnhMetaFile( cFileName ) // nombre del fichero EMF
PlayEnhMetaFile( hDC, hEMF, { 0, 0, nAncho, nAlto } ) // hay que crear esta función para que tome el 3er parametro como un rect
CloseEnhMetafile( hEMF )
SelectObject( hDC, hOldBmp )
DeleteDC( hDC )FUNCTION createBmp()
LOCAL hDib
local hDC := CreateCompatibleDC( 0 )
local hBmp := CreateCompatibleBitmap( hDC, 50, 75 )
local hOldBmp := SelectObject( hDC, hBmp ) // ya tenemos el nuevo bitmap seleccionado en un hDC
local hEMF := GetEnhMetaFile( '1.emf' ) // nombre del fichero EMF
PlayEnhMetaFile( hDC, hEMF,, .T., 50, 75 ) // hay que crear esta función para que tome el 3er parametro como un rect
CloseEnhMetafile( hEMF )
hDib := DibFromBitmap( hBmp )
DibWrite( "file.bmp" , hDib )
GloBalFree( hDib )
SelectObject( hDC, hOldBmp )
DeleteDC( hDC )
RETURN( NIL )Hola Marcelo...
Prueba hacer este cambio, pieso que podrias tener problemas en el DC que estas creando para le bitmap
local hDC1 := GetDC( GetDesktopWindow() )
local hDC := CreateCompatibleDC( hDC1 )
ocal hBmp := CreateCompatibleBitmap( hDC1, 50, 75 )
o le pasas un hDC valido a la funcion
FUNCTION createBmp( hDC1 )
el problema puede estar en que si haces un bitmap con un hDC "NULO" este se crea monocromatico
despues de crear el bitmap puedes usar DrawBitmap o PalBmpDraw para probar que este bien
Marcelo,
A que te refieres con "no obtengo resultado" ? Se crea ? Está vacio ? No se ve nada ? etc...
Como te indica Daniel, haria falta crear un segundo hDC compatible con el anterior para que no genere un bitmap en blanco y negro.
Daniel, Antonio
Gracias por la ayuda, he probado con pasar un DC valido como parametro, tambien desde GetDC( GetDesktopWindow() ), entre esas combinaciones
el resultado ha sido un BMP de 24 bit en lugar a uno monocromatico como advirtio Daniel, pero no se pinta el EMF en el BMP.
Antonio, el programa genera el BMP de 50x75 como se especifica pero todo negro, sin el EMF dibujado en el.
Alguna otra opcion...?
Gracias
Marcelo
Hola Marcelo...
estas usando mal la funcion PlayEnhMetaFile
mira los parametros que debes pasar
PlayEnhMetaFile( hDC, hEMF, { 0, 0, 50, 75 } )
#ifdef __XPP__
CLIPPER PLAYENHMET( PARAMS ) // () hDC, hMetaFile, hWnd, lPrinter --> lSuccess
#else
CLIPPER PLAYENHMETAFILE( PARAMS ) // () hDC, hMetaFile, hWnd, lPrinter --> lSuccess
#endif
{
RECT rect;
BOOL lRet;
if( _parl( 4 ) )
{
rect.left = 0;
rect.top = 0;
rect.right = GetDeviceCaps( ( HDC ) _parnl( 1 ), HORZRES );
rect.bottom = GetDeviceCaps( ( HDC ) _parnl( 1 ), VERTRES );
if( _parni( 5 ) )
rect.right += _parni( 5 );
if( _parni( 6 ) )
rect.bottom += _parni( 6 );
}
else
GetClientRect ( ( HWND )_parnl( 3 ), &rect );
lRet = ( BOOL ) PlayEnhMetaFile( ( HDC ) _parnl( 1 ), ( HENHMETAFILE ) _parnl( 2 ), &rect );
if( ! lRet && lRet != ERROR_SUCCESS )
{
char sBuffer[ 200 ];
wsprintf( sBuffer, "Error (%d) showing Enhanced Metafile\n\nError description:", GetLastError() );
MessageBox( NULL, sBuffer, ( LPSTR ) "Printing EMF", MB_OK | MB_ICONEXCLAMATION );
}
_retl( lRet );
}