How Can I scan a graphics from scanner using fwh app(SOLVED)

Horizon
Posts: 997
Joined: Fri May 23, 2008 1:33 pm

How Can I scan a graphics from scanner using fwh app(SOLVED)

Post by Horizon »

Hi,

I want _ a photo from scanner using my application and save it.
Is it possible?

Thanks,
Last edited by Horizon on Wed Oct 29, 2008 8:35 am, edited 1 time in total.
Regards,

Hakan ONEMLI

Harbour & VS 2019 & FWH 20.12
User avatar
James Bott
Posts: 4654
Joined: Fri Nov 18, 2005 4:52 pm
Location: San Diego, California, USA
Contact:

Post by James Bott »

Horizon,

Send me your email address, and I will send you some sample code.

Regards,
James
User avatar
fafi
Posts: 169
Joined: Mon Feb 25, 2008 2:42 am

Post by fafi »

Hi James !

Please send to me xharbour@yahoo.co.id

I want to try..

Regards
Fafi
User avatar
anserkk
Posts: 1280
Joined: Fri Jun 13, 2008 11:04 am
Location: Kochi, India

Post by anserkk »

Mr.James,

If you don't mind can you send it to my email id also anserkk@gmail.com

Regards

Anser
HunterEC
Posts: 723
Joined: Tue Sep 04, 2007 8:45 am

Post by HunterEC »

James: thank you for your great support to the community. Can you also send me the sample code. My email address is: pmoreno@attglobal.net
Thank you. :D
Horizon
Posts: 997
Joined: Fri May 23, 2008 1:33 pm

Post by Horizon »

Hi James.

My mail is hakan@objekt.com.tr

Thanks,
Regards,

Hakan ONEMLI

Harbour & VS 2019 & FWH 20.12
csincuir
Posts: 305
Joined: Sat Feb 03, 2007 6:36 am
Location: Guatemala
Contact:

Post by csincuir »

Hi James

Please send to me please: sincuir @ yahoo.com

Thanks in advance.

Carlos Sincuir
alfonso
Posts: 46
Joined: Fri Mar 09, 2007 1:31 pm
Location: España

Post by alfonso »

Hello James:
Can you also send me the sample code. My email address is: jose_de_alfonso@yahoo.es
Thanks in advance,
User avatar
James Bott
Posts: 4654
Joined: Fri Nov 18, 2005 4:52 pm
Location: San Diego, California, USA
Contact:

Post by James Bott »

You can all download the scanner class here:

http://ourworld.compuserve.com/homepage ... rogram.htm

Regards,
James
Horizon
Posts: 997
Joined: Fri May 23, 2008 1:33 pm

Post by Horizon »

Thank you for class

Is there any example to use it?
Regards,

Hakan ONEMLI

Harbour & VS 2019 & FWH 20.12
User avatar
James Bott
Posts: 4654
Joined: Fri Nov 18, 2005 4:52 pm
Location: San Diego, California, USA
Contact:

Post by James Bott »

Hakan,

>Is there any example to use it?

I have never used it and it didn't come with any examples. You might try searching the forum.

James
User avatar
dutch
Posts: 1395
Joined: Fri Oct 07, 2005 5:56 pm
Location: Thailand

Post by dutch »

This is the classes and sample from The Full (I thought). I've used it and it works fine for me

Code: Select all

/*------------------------------------------------------------------------*
     ฺฤฤฤฤฤฤฤฤฤฤฤฤฤฤฤฤฤฤฤฤฤฤฤฤฤฤฤฤฤฤฤฤฤฤฤฤฤฤฤฤฤฤฤฤฤฤฤฤฤฤฤฤฤฤฤฤฤฤฤฤฤฤฤฤฤฤฤฟ
   ณ                                                                   ณ
   ณ ProcName......: Scanner.prg                                       ณ
   ณ Pourpose......: TWAIN standard device Class interface             ณ
   ณ Date..........: 05-11-96                                          ณ
   ณ Author........: (c),L.Gadaleta                                    ณ
   ณ                                                                   ณ
   ภฤฤฤฤฤฤฤฤฤฤฤฤฤฤฤฤฤฤฤฤฤฤฤฤฤฤฤฤฤฤฤฤฤฤฤฤฤฤฤฤฤฤฤฤฤฤฤฤฤฤฤฤฤฤฤฤฤฤฤฤฤฤฤฤฤฤฤู
   
*------------------------------------------------------------------------*/
#include "FiveWin.ch"
#include "Image.ch"

#define STAND_ALONE

#define TWAIN_DLL             "EZTw32.dll"       // 32bits
* #define TWAIN_DLL             "DMTwain.dll"    // 16bits

#define CBM_INIT 4    // for freeimage.dll

#define DIB_RGB_COLORS 0 // for freeimage.dll

STATIC hLib              // for freeimage.dll
STATIC oWnd, oImage



#ifdef STAND_ALONE

FUNCTION Main(cFileRes)
LOCAL cFile, nRes, n

Default cFileRes := 'TESTSCAN.JPG'

cFile := cFileRes  
nRes  := 100
if !cFileRes == NIL
   if ( n:=AT(",",cFileRes) ) > 0
      cFile := Alltrim(Substr(cFileRes,1,n-1))
      nRes  := Val(Alltrim(Substr(cFileRes,n+1)))
   end
end

CursorWait()

DEFINE WINDOW oWnd FROM 1,1 TO 1,1
        
ACTIVATE WINDOW oWnd ON INIT (oWnd:Hide(), ;
                              RunScan(cFile,oWnd:hWnd,nRes)) 

if file( cFile )
   SaveImage( cFile )
end

CursorArrow()

RETURN NIL

STATIC FUNCTION RunScan(cFile,hWnd,nRes)
LOCAL _ := Scanner():New(hWnd)
DEFAULT nRes := 100                                     // Scanner resolution in Dpi
   _:Choose()
   _:Set(.T.)                                       // Set User Interface Off
   _:DigiToFile(cFile,nRes)                         // Acquires
   _:End()
   oWnd:End()
RETURN NIL

#endif

CLASS Scanner
   DATA   hWnd   AS NUMERIC   // Handle of the window
   DATA   hDll   AS NUMERIC   // Handle of the DLL
   DATA   lLoad  AS LOGICAL   //   .T. DLL & Driver Loaded
   DATA   hDib   AS NUMERIC   // Current Dib handle
   *
   METHOD New()         CONSTRUCTOR
   METHOD End()
        METHOD Set()                    // Acquiring Dialog ON/OFF
   METHOD Choose()         // Select Image Device Source
   METHOD DigiToFile()      // Acquire Image and save to a file
   METHOD DigiToClip()      // Acquire Image and copy to ClipBoard
        METHOD SetResolution()          // Set Dpi for the scanner
   *
   PROTECTED :
      METHOD Free()         // Release Dib's handle
      METHOD IsActive()      // Twain Driver Loaded
      METHOD Register()      // Register my application into Twain application
                METHOD DibToFile()              // Write to file Dib's handle in BMP format
END CLASS

METHOD New(hWnd)
// Constructor
::hWnd := iif( ValType( hWnd ) == "N" , hWnd , 0 )
::lLoad := .T.
::hDLL := LoadLibrary( TWAIN_DLL )
::hDib := 0
if ::hDll <= 21
   ::lLoad := .F.
   MsgAlert( BuildError(::hDll) , TWAIN_DLL )
   RETU Self
end
if ( ::lLoad := ::IsActive() )
   ::Register()
end
RETU Self

METHOD End()
// Destructor
if ::hDib != 0
   ::Free( ::hDib )
end
FreeLibrary( ::hDll )
RETU NIL

METHOD DigiToFile( cFile , nRes )
// Acquire Document & save to file
LOCAL nPixType := 0
LOCAL cFarProc
DEFAULT nRes := 100
::SetResolution( nRes )

if ::lLoad
   cFarProc := GetProcAddress( ::hDLL, "TWAIN_AcquireNative",.T., WORD,WORD,_INT )
   ::hDib  := CallDLL( cFarProc,::hWnd,nPixType )
   if ::hDib == 0
                MsgInfo("Cannot Load Image, Scanner not found","")
   else
      ::DibToFile(::hDib,cFile)
      ::Free( ::hDib )
   end
end
RETU Self

METHOD DigiToClip()
// Acquire document & copy to ClipBoard
LOCAL nPixType := 0
LOCAL cFarProc
LOCAL nResult
if ::lLoad
   cFarProc := GetProcAddress( ::hDLL, "TWAIN_AcquireToClipBoard",.T., _INT,WORD,_INT )
   nResult  := CallDLL( cFarProc,::hWnd,nPixType )
end
RETU Self

METHOD SetResolution( nDpi )
// NEW
LOCAL cFarProc
LOCAL uResult
DEFAULT nDpi := 100
if ::lLoad
   cFarProc := GetProcAddress( ::hDLL, "TWAIN_SetResolution",.T., VOID,_DOUBLE )
   uResult  := CallDLL( cFarProc,nDpi )
end
RETU Self

METHOD Set(lShow)
// Show-Hide Scanner's Dialog Box
LOCAL nHide := 0      // Default: Shows Scanner's Dialog Box
LOCAL cFarProc
LOCAL uResult
DEFAULT lShow := .T.
if ::lLoad
   nHide := iif(lShow,0,1)
   cFarProc := GetProcAddress( ::hDLL, "TWAIN_SetHideUI",.T., VOID,_INT )
   uResult  := CallDLL( cFarProc,nHide )
end
RETU Self

METHOD Choose()
// Select Image Device Source
LOCAL cFarProc
LOCAL nResult
if ::lLoad
   cFarProc := GetProcAddress( ::hDLL, "TWAIN_SelectImageSource",.T., _INT,WORD )
   nResult  := CallDLL( cFarProc,::hWnd )
end
RETU Self

//---------- Protected Methods

   METHOD Free(hDib)
   // Release Dib's Handle
   LOCAL cFarProc
   LOCAL uResult
   cFarProc := GetProcAddress( ::hDLL, "TWAIN_FreeNative",.T., VOID,WORD )
   uResult  := CallDLL( cFarProc,hDib )
   RETU NIL

   METHOD DibToFile(hDib,cFile)
   // Write to File From DIB's handle
   LOCAL cFarProc
   LOCAL nResult
   LOCAL lRet
   cFarProc := GetProcAddress( ::hDLL, "TWAIN_WriteNativeToFilename",.T., _INT,WORD,LPSTR)
   lRet     := ( (nResult:=CallDLL( cFarProc,hDib,cFile ))==0 )
   DO CASE
      CASE nResult == -1
         MsgInfo("Annullato dall'utente","File non registrato")
      CASE nResult == -2
         MsgInfo("Errore durante la scrittura sul file "+cFile,"File non registrato")
      CASE nResult == -3
         MsgInfo("Errore interno sul file DIB","File non registrato")
      CASE nResult == -4
         MsgInfo("Errore durante la scrittura sul file "+cFile+", probabile spazio insufficiente sul disco !","File non registrato")
   ENDCASE
   RETU lRet

   METHOD IsActive()
   // Is Twain driver loaded ?
   LOCAL cFarProc
   LOCAL nResult
   cFarProc := GetProcAddress( ::hDLL, "TWAIN_IsAvailable",.T., _INT )
   if ! (nResult    := CallDLL( cFarProc )) == 1
      MsgAlert("Nessun driver per apparecchi TWAIN compatibili risulta disponibile !","Errore hardware")
      // Messaggio inviato direttamente da TWAIN.DLL
   end
   RETU iif(nResult==1,.T.,.F.)

   METHOD Register()
   // Register my application into Twain application
   LOCAL   nMaiorNum := 1
   LOCAL nMinorNum := 0   // Result -> 1.0
   LOCAL nLanguage := 0
   LOCAL nCountry  := 0
   LOCAL cVersion  := "1.0"
   LOCAL cManifact := "The Genius"
   LOCAL cFamily   := "Digitizer"
   LOCAL cProduct := StrTran(cFileName(GetModuleFileName(GetInstance())),".EXE","")
   LOCAL cFarProc
   LOCAL uResult
   cFarProc := GetProcAddress( ::hDLL, "TWAIN_RegisterApp",.T.,;
                           VOID,_INT,_INT,_INT,_INT,LPSTR,LPSTR,LPSTR,LPSTR )
   uResult  := CallDLL( cFarProc,nMaiorNum,nMinorNum,nLanguage,nCountry,cVersion,cManifact,cFamily,cProduct )
   RETU NIL

//---------- END Protected Methods

STATIC FUNCTION BuildError(nError)
LOCAL cRet := "Errore nella libreria dinamica"
DO CASE
   CASE nError == 0
         cRet := "Memoria insufficiente ad eseguire il programma"
   CASE nError == 2
         cRet := "File non trovato"
   CASE nError == 3
         cRet := "Percorso non trovato"
   CASE nError == 5
         cRet := "Tentantivo di collegarsi dinamicamente ad un task o errore di condivisione"
   CASE nError == 6
         cRet := "La libreria richiede un segemento separato per ogni task"
   CASE nError == 8
         cRet := "Memoria insufficiente ad avviare l'applicazione"
   CASE nError == 10
         cRet := "Versione di MS Windows non corretta"
   CASE nError == 11
         cRet := "Libreria non valida oppure non &#138; un'applicazione MS Windows"
   CASE nError == 12
         cRet := "Applicazione disegnata per un sistema operativo diverso"
   CASE nError == 13
         cRet := "Applicazione disegnata per MS-DOS 4.0"
   CASE nError == 14
         cRet := "Tipo di file eseguibile sconosciuto"
   CASE nError == 15
         cRet := "Tentativo di caricare un'applicazione disegnata per funzionare in modalit… reale"
   CASE nError == 16
         cRet := "Tentativo di caricare una seconda istanza dell'applicazione contenente segmenti di dati multipli non marcati per la sola lettura"
ENDCASE
RETU OemToAnsi( cRet + "!" )



//------------------ Freeimage.dll ------------------------//

FUNCTION SaveImage( cFile )
LOCAL nFormat, hDib, hInfoH, hInfo, hBits, hWnd, hDC, hBmp, lOk

#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 

lOk := fiSave( 2 , hDib, cFile )

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 
RETURN hBmp


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 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 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 FIROTATE( hDib AS LONG, nAngle AS _DOUBLE ) AS LONG; 
      PASCAL FROM "_FreeImage_RotateClassic@12" 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" 
Horizon
Posts: 997
Joined: Fri May 23, 2008 1:33 pm

Post by Horizon »

Thanks James, Dutch.

Should I install any program to run this class? I have Xerox 3119 that has scanner. I can scan any document with its program.

Thanks again.
Regards,

Hakan ONEMLI

Harbour & VS 2019 & FWH 20.12
User avatar
dutch
Posts: 1395
Joined: Fri Oct 07, 2005 5:56 pm
Location: Thailand

Post by dutch »

Dear Horiaon,

You must have EZTW32.DLL, FREEIMAGE.DLL. That's all.

http://rapidshare.com/files/157961548/EZTW32.dll.html

http://rapidshare.com/files/157961852/F ... e.dll.html

Regards,
Dutch
Horizon
Posts: 997
Joined: Fri May 23, 2008 1:33 pm

Post by Horizon »

Hi Dutch,

I have downloaded the EZTW32.dll and FreeImage.dll to my app. directory. When I start to my test application, it gives an error and application breaks and returns to os.

I try to register EZTW32.DLL using, but it gives an error when trying registering.

I use Vista, SP1. I try XP SP3. it is same error.

What can do more?
Regards,

Hakan ONEMLI

Harbour & VS 2019 & FWH 20.12
Post Reply