#include "FiveWin.ch" #include "Constant.ch" #include "Inkey.ch" #define GW_CHILD 5 #define GW_HWNDNEXT 2 #define RT_BITMAP 2 #define MB_ICONEXCLAMATION 48 #ifdef __XPP__ #define New _New #define Super ::TBitmap #endif STATIC hLib FUNCTION MAIN() LOCAL oDlg, oImg DEFINE DIALOG oDlg; SIZE 700, 500 @ 1, 1 IMAGE oImg FILE "SFONDO.JPG" @ 0, 1 BUTTON "Save" ACTION MsgInfo( oImg:SaveImage( "SFONDO.PNG", 13 ) ) @ 0, 7 BUTTON "Print" ACTION PRINT( oImg ) ACTIVATE DIALOG oDlg; CENTER RETURN NIL STATIC FUNCTION PRINT( oImg ) LOCAL oPrn PRINT oPrn PREVIEW PAGE oPrn:SayImage( 0, 0, oImg ) ENDPAGE ENDPRINT RETURN NIL //----------------------------------------------------------------------------// CLASS TImage FROM TBitmap CLASSDATA lRegistered AS LOGICAL METHOD New( nTop, nLeft, nWidth, nHeight, cResName, cBmpFile, lNoBorder,; oWnd, bLClicked, bRClicked, lScroll, lStretch, oCursor,; cMsg, lUpdate, bWhen, lPixel, bValid, lDesign ) CONSTRUCTOR METHOD Define( cResName, cBmpFile, oWnd ) CONSTRUCTOR METHOD LoadImage( cResName, cBmpFile ) METHOD SaveImage( cFile, nFormat, nFlag ) ENDCLASS //----------------------------------------------------------------------------// METHOD New( nTop, nLeft, nWidth, nHeight, cResName, cBmpFile, lNoBorder,; oWnd, bLClicked, bRClicked, lScroll, lStretch, oCursor,; cMsg, lUpdate, bWhen, lPixel, bValid, lDesign ) CLASS TImage #ifdef __XPP__ ::lRegistered = .f. #endif Super:New( nTop, nLeft, nWidth, nHeight, cResName, cBmpFile, lNoBorder, ; oWnd, bLClicked, bRClicked, lScroll, lStretch, oCursor, ; cMsg, lUpdate, bWhen, lPixel, bValid, lDesign ) return Self //----------------------------------------------------------------------------// // This method does not create a control, it just creates a bitmap object to // be used somewhere else. METHOD Define( cResName, cBmpFile, oWnd ) CLASS TImage local aBmpPal DEFAULT oWnd := GetWndDefault() ::oWnd = oWnd ::nZoom = 1 ::hWnd = 0 ::hBitmap = 0 ::hPalette = 0 if ! Empty( cResName ) aBmpPal = PalBmpLoad( cResName ) ::hBitmap = aBmpPal[ 1 ] ::hPalette = aBmpPal[ 2 ] cBmpFile = nil endif if ! Empty( cBmpFile ) .and. File( cBmpFile ) ::cBmpFile = cBmpFile ::hBitmap = FILoadImg( AllTrim( cBmpFile ) ) endif if ::hBitmap != 0 PalBmpNew( 0, ::hBitmap, ::hPalette ) endif return Self //----------------------------------------------------------------------------// METHOD LoadImage( cResName, cBmpFile ) CLASS TImage local lChanged := .f. local hOldBmp := ::hBitmap local hOldPal := ::hPalette local aBmpPal DEFAULT cResName := ::cResName, cBmpFile := ::cBmpFile if ! Empty( cResName ) aBmpPal = PalBmpLoad( cResName ) ::hBitmap = aBmpPal[ 1 ] ::hPalette = aBmpPal[ 2 ] lChanged = .t. cBmpFile = nil elseif File( cBmpFile ) ::hBitmap = FILoadImg( AllTrim( cBmpFile ) ) lChanged := .t. cResName := nil endif if lChanged ::cResName = cResName ::cBmpFile = cBmpFile if ! Empty( hOldBmp ) PalBmpFree( hOldBmp, hOldPal ) endif PalBmpNew( ::hWnd, ::hBitmap, ::hPalette ) endif return lChanged //----------------------------------------------------------------------------// METHOD SaveImage( cFile, nFormat ) CLASS TImage // 0 -> Bmp // 2 -> Jpg // 13 -> Png return FISaveImg( ::cBmpFile, cFile, nFormat ) //----------------------------------------------------------------------------// #define CBM_INIT 4 #define DIB_RGB_COLORS 0 FUNCTION FILOADIMG( cFile ) LOCAL nFormat, hDib, hInfoH, hInfo, hBits, hWnd, hDC, hBmp #ifdef __CLIPPER__ hLib = LOADLIB32( "freeimage.dll" ) #else hLib = LOADLIBRARY( "freeimage.dll" ) #endif if hLib <= 32 MsgStop( "Cannot load FreeImage.dll" ) return 0 endif nFormat = FIGETFILETYPE( cFile, 0 ) hDib = FILOAD( nFormat, cFile, 0 ) hInfoH = FIGETINFOHEADER( hDib ) hInfo = FIGETINFO( hDib ) hBits = FIGETBITS( hDib ) hWnd = GETDESKTOPWINDOW() #ifdef __CLIPPER__ hDC = GETDC32( hWnd ) #else hDC = GETDC( hWnd ) #endif hBmp = CREATEDIBITMAP( hDC, hInfoH, CBM_INIT, hBits, hInfo, DIB_RGB_COLORS ) #ifdef __CLIPPER__ RELEASEDC32( hWnd, hDC ) #else RELEASEDC( hWnd, hDC ) #endif FIUNLOAD( hDib ) #ifdef __CLIPPER__ FREELIB32( hLib ) #else FREELIBRARY( hLib ) #endif #ifdef __CLIPPER__ hBmp = NLOWORD( WOWHANDLE16( hBmp, 8 ) ) #endif RETURN hBmp FUNCTION FISAVEIMG( cSrcFile, cDstFile, nDstFormat ) LOCAL nSrcFormat, hDib, lOk #ifdef __CLIPPER__ hLib = LOADLIB32( "freeimage.dll" ) #else hLib = LOADLIBRARY( "freeimage.dll" ) #endif nSrcFormat = FIGETFILETYPE( cSrcFile, 0 ) hDib = FILOAD( nSrcFormat, cSrcFile, 0 ) lOk = FISAVE( nDstFormat, hDib, cDstFile, 0 ) #ifdef __CLIPPER__ FREELIB32( hLib ) #else FREELIBRARY( hLib ) #endif RETURN lOk //----------------------------------------------------------------------------// DLL32 STATIC FUNCTION FIGETFILETYPE( cFileName AS LPSTR, nSize AS LONG ) AS LONG; PASCAL FROM "_FreeImage_GetFileType@8" LIB hLib DLL32 STATIC FUNCTION FILOAD( nFormat AS LONG, cFileName AS LPSTR, nFlags AS LONG ) AS LONG; PASCAL FROM "_FreeImage_Load@12" LIB hLib DLL32 STATIC FUNCTION FISAVE( nFormat AS LONG, hDib AS LONG, cFileName AS LPSTR, nFlags AS LONG ) AS BOOL; PASCAL FROM "_FreeImage_Save@16" LIB hLib DLL32 STATIC FUNCTION FIUNLOAD( hDib AS LONG ) AS VOID; PASCAL FROM "_FreeImage_Unload@4" LIB hLib DLL32 STATIC FUNCTION FIGETINFOHEADER( hDib AS LONG ) AS LONG; PASCAL FROM "_FreeImage_GetInfoHeader@4" LIB hLib DLL32 STATIC FUNCTION FIGETINFO( hDib AS LONG ) AS LONG; PASCAL FROM "_FreeImage_GetInfo@4" LIB hLib DLL32 STATIC FUNCTION FIGETBITS( hDib AS LONG ) AS LONG; PASCAL FROM "_FreeImage_GetBits@4" LIB hLib DLL32 STATIC FUNCTION GETDC32( hWnd AS LONG ) AS LONG; PASCAL FROM "GetDC" LIB "user32.dll" DLL32 STATIC FUNCTION RELEASEDC32( hWnd AS LONG ) AS LONG; PASCAL FROM "ReleaseDC" LIB "user32.dll" DLL32 STATIC FUNCTION CREATEDIBITMAP( hDC AS LONG, hInfoH AS LONG, nFlags AS LONG, hBits AS LONG, hInfo AS LONG, nUsage AS LONG ) AS LONG; PASCAL FROM "CreateDIBitmap" LIB "gdi32.dll" DLL32 FUNCTION WOWHANDLE16( nHandle AS LONG, nHandleType AS LONG ) AS LONG; PASCAL FROM "WOWHandle16" LIB "wow32.dll" //----------------------------------------------------------------------------//