program ScanUtils ; { Utility toolbar for processing scanned images } toolbar 'Scan Utils' ; var Image1 ; Image2 ; const btn_Scan = 9 ; procedure Scan ; button btn_Scan,'Scan' ; var NewScan ; begin NewScan := TwainAcquire ; Show( NewScan ) ; end; procedure RotateLeft ; button btn_ArrowW,'Rotate Left' ; begin GetActiveImage( Image1 ) ; Image1 := Rotate90( Image1,1 ) ; FitInWindow( Image1 ) ; Free( Image1 ) ; end; procedure RotateRight ; button btn_ArrowE,'Rotate Right' ; begin GetActiveImage( Image1 ) ; Image1 := Rotate90( Image1,-1 ) ; FitInWindow( Image1 ) ; Free( Image1 ) ; end; procedure UpsideDown ; button btn_ArrowN,'Turn Upside Down' ; begin GetActiveImage( Image1 ) ; Image1 := Rotate90( Image1,2 ) ; FitInWindow( Image1 ) ; Free( Image1 ) ; end; procedure Fit ; button btn_PCScreen,'Display Half Size' ; begin GetActiveImage( Image1 ) ; SetDisplayZoom( Image1,50 ) ; FitInWindow( Image1 ) ; Free( Image1 ) ; end; procedure Extract ; button btn_DocCamera,'Extract Image' ; var ROI ; DZoom ; begin GetActiveImage( Image1 ) ; DZoom := GetDisplayZoom( Image1 ) ; ROI := GetROI( Image1 ) ; if IsArray( ROI ) then begin DeleteROI( Image1 ) ; Image2 := Image1[ ROI[0,0]..ROI[2,0],ROI[1,0]..ROI[3,0] ] ; Show( Image2 ) ; SetDisplayZoom( Image2,DZoom ) ; FitInWindow( Image2 ) ; end; Free( Image2 ) ; Free( Image1 ) ; end; procedure Crop ; button btn_CapXi,'Crop Image' ; var ROI ; begin GetActiveImage( Image1 ) ; ROI := GetROI( Image1 ) ; if IsArray( ROI ) then begin DeleteROI( Image1 ) ; StoreUndoInfo( Image1,'Crop' ) ; Image1 := Image1[ ROI[0,0]..ROI[2,0],ROI[1,0]..ROI[3,0] ] ; FitInWindow( Image1 ) ; end; Free( Image1 ) ; end; procedure Realign ; button btn_Theta,'Straighten Image' ; var Flags ; Angle ; dx,dy ; begin GetActiveImage( Image1 ) ; Flags := GetFlags( Image1 ) ; if IsArray( Flags ) then if GetYSize( Flags ) >= 2 then begin dx := Flags[0,1] - Flags[0,0] ; dy := Flags[1,1] - Flags[1,0] ; if ( dx <> 0 ) and ( dy <> 0 ) then begin Angle := arctan( abs( double( dy ) / dx ) ) ; if dy < 0 then Angle := -Angle ; DeleteFlags( Image1 ) ; StoreUndoInfo( Image1,'Straighten' ) ; Image1 := Rotate( Image1,Angle ) ; end; end; end; procedure ProcessImage ; button btn_Gamma,'Auto Enhance' ; var DZoom ; begin { init } GetActiveImage( Image1 ) ; DZoom := GetDisplayZoom( Image1 ) ; { gamma correction } SetEnhancement( Image1,0,0,1.6 ) ; CreateDisplayImage( Image1 ) ; SetEnhancement( Image1,0,0,1.0 ) ; GetActiveImage( Image2 ) ; //Delete( Image1 ) ; { display } SetDisplayZoom( Image2,DZoom ) ; FitInWindow( Image2 ) ; { clean up } Free( Image1 ) ; Free( Image2 ) ; end; begin end.