Pongo aqui lo ultimo que he a帽adido a gdi+ ....
EN el archivo gdiplus.cpp
Aparte tengo este c贸digo que no consigo que funcione ....Me devuelve un numero de hbitmap pero no pinta nada ...
Aqui el codigo tGdiplus y una funci贸n para crear thumbnails ....
Por ahora es lo que tengo nuevo .
Un Ejemplo del paso desde gdi+ a gdi normal :
EN el archivo gdiplus.cpp
HB_FUNC( GDIPLUSISEMPTYGRAPHICS)
{
聽 聽Graphics * graphics = ( Graphics * ) hb_parnl( 1 );
聽 聽
聽 聽hb_retl( ( BOOL ) 聽 graphics->IsClipEmpty() ) ;
聽
}
//----------------------------------------------------------------------------//
HB_FUNC( GDIPLUSSETSMOOTHINGGRAPHICS )
{
聽 聽Graphics * graphics = ( Graphics * ) hb_parnl( 1 );
聽 聽int nType = 聽hb_parni( 2 );
聽 聽 聽
聽 聽switch (nType){
聽 聽聽
聽 聽聽case 1:
聽 聽聽 聽graphics->SetSmoothingMode( SmoothingModeNone ) ;
聽 聽聽case 2:
聽 聽聽 graphics->SetSmoothingMode( SmoothingModeDefault );
聽 聽 case 3:
聽 聽聽 graphics->SetSmoothingMode( 聽SmoothingModeHighSpeed );聽
聽 聽聽case 4:
聽 聽聽 graphics->SetSmoothingMode( 聽SmoothingModeHighQuality );聽 聽 聽
聽 聽 case 5:
聽 聽聽 graphics->SetSmoothingMode( 聽SmoothingModeAntiAlias );聽 聽
聽
聽 聽 } 聽
聽 聽 聽 聽 聽
}
//----------------------------------------------------------------------------//
HB_FUNC( GDIPLUSIMAGECREATETHUMB )
{
聽 Bitmap * newImage = ( Bitmap * ) hb_parnl( 1 );
聽 int nWidth = 聽hb_parni( 2 );
聽 int nHeight = hb_parni( 3 );
聽
聽 Image * hThumb = newImage->GetThumbnailImage( nWidth , nHeight, NULL, NULL );
聽
聽 hb_retnl( ( HB_LONG ) hThumb );
聽 聽
聽 }
//----------------------------------------------------------------------------//
HB_FUNC( GDIPLUSCREATEHBITMAPIMAGE )
{
聽HBITMAP聽 聽 handle;
聽 聽 int聽聽 聽 聽 聽 error;
聽 聽
聽Bitmap * newImage = ( Bitmap * ) hb_parnl( 1 );
聽error = 聽newImage->GetHBITMAP( Color( 0,0,0 ), &handle );
聽
聽 聽 if ( error != 0 )
聽 聽 { 聽
聽 hb_retnl( ( HB_LONG ) NULL );聽
}
聽hb_retnl( ( HB_LONG ) handle );
}
//----------------------------------------------------------------------------//
HB_FUNC( GDIPLUSGETWIDTHBITMAP)
{
聽 Bitmap * newImage = ( Bitmap * ) hb_parnl( 1 );
聽 hb_retnl( ( HB_LONG ) 聽newImage->GetWidth() );
}
HB_FUNC( GDIPLUSGETHEIGHTBITMAP)
{
聽 Bitmap * newImage = ( Bitmap * ) hb_parnl( 1 );
聽 hb_retnl( ( HB_LONG ) 聽newImage->GetHeight());
}Aparte tengo este c贸digo que no consigo que funcione ....Me devuelve un numero de hbitmap pero no pinta nada ...
HB_FUNC( GDIPLUSCREATEBITMAPFROMSTREAM )
{
聽 聽 聽
聽 聽 聽IStream *pStream = NULL;
聽 聽 聽HGLOBAL m_hBuffer = GlobalAlloc(GMEM_MOVEABLE, 0);
聽 聽
聽 聽 聽
聽 // HGLOBAL m_hBuffer 聽= GlobalAlloc(GMEM_FIXED, IMAGE_SIZE);
聽 聽 聽 聽 聽 聽
聽 聽if (CreateStreamOnHGlobal(m_hBuffer, FALSE, &pStream ) != S_OK )
聽 聽{
聽 聽聽聽 聽 GlobalFree( m_hBuffer );
聽 聽聽聽 聽 hb_retl ( (bool) FALSE 聽);
聽 聽聽}
聽 聽聽
聽 聽size_t size = GlobalSize(m_hBuffer);
聽 聽FILE *f;
聽 聽f = fopen("app.bmp", "rb");
聽 聽
聽 聽if( f == NULL)
聽 聽 MessageBox( GetActiveWindow(), "fallo", "No carga la imagen", 0x30 );
聽
聽
聽 聽fread( m_hBuffer,1,size,f);
聽 聽 聽
聽 聽fclose(f);
聽 聽
聽聽 聽GlobalFree( m_hBuffer );
聽
聽 聽// create Bitmap
聽 聽Bitmap* bitmap = new Bitmap( pStream );
聽 聽//聽 聽 Bitmap* bitmap = new Bitmap( L"app.bmp" );
聽
聽 聽 hb_retnl( ( HB_LONG ) bitmap );
聽 聽聽
}Aqui el codigo tGdiplus y una funci贸n para crear thumbnails ....
METHOD CreateHbitmap( ) INLINE 聽GdiPlusCreateHBitmapImage( ::hBmp 聽) 聽//devuelve un hbitmap GDI normal
METHOD getWidth() 聽INLINE GdiPlusGetWidthBitmap( ::hbmp )
聽METHOD getHeight() INLINE GdiPlusGetHeightBitmap( ::hbmp )
METHOD CreateThumbnail( nWidth, nHeight ) CLASS GDIBmp
local oThumb:= gdiBmp():new()
local hImage
local nRatio
if Empty( nHeight )
nRatio := ::getWidth()/::getHeight()
nHeight := nWidth * nRatio
endif
hImage := GdiPlusImageCreateThumb( ::hbmp, nWidth, nHeight )
oThumb:hBmp := hImage
Return oThumb
//----------------------------------------------------------------------------//
Function GDIPlusSaveThumbnail( cImageIni, cImageEnd , nWhidth, nHeight )
local cExtIni := Upper(cFileExt( cImageIni ))
local oImage:= GDIBmp():New( cImageIni )
local oThumb
local nScan
聽if( nScan:= aScan( oImage:aExtIni, cExtIni )) == 0
聽 聽 Msginfo( " el archivo "+ cImageIni + " tiene un formato no soportado")
聽 聽 return .f.
聽endif
聽oThumb:= oImage:CreateThumbmail( nWhidth, nHeight )
聽oThumb:Save( cImageEnd )
聽
oImage:Destroy()
oThumb:Destroy()
return .t.Por ahora es lo que tengo nuevo .
Un Ejemplo del paso desde gdi+ a gdi normal :
function Main()
聽 聽local oWnd
聽 聽local oImage
聽 聽DEFINE WINDOW oWnd TITLE "Testing GDI+ Class" FROM 5,5 TO 600, 800 PIXEL
聽 聽
聽 聽@ 3, 38 BITMAP oimage File "hola" size 120,120 of oWnd // cargamos la imagen en vacio.
聽 聽ACTIVATE WINDOW oWnd ;
聽 聽 聽 ON PAINT Gditest( 聽oImage )
return nil
function Gditest( 聽oImage )
聽
聽 聽local cfile:= cGetfile("escoge una imagen") 聽// funciona tambi茅n con png
// 聽local cFile := "c:\fwh\bitmaps\pngs\image6.png"
聽 聽local obmp:= gdiBmp():new( cFile )
聽 oImage:hBitmap := obmp:CreateHbitmap( ) 聽
聽 oImage:HasAlpha()
聽 oimage:refresh()
聽Return nil