tesseract_bin 1.0.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- data/.document +5 -0
- data/Gemfile +14 -0
- data/Gemfile.lock +23 -0
- data/LICENSE.txt +20 -0
- data/README.rdoc +19 -0
- data/Rakefile +46 -0
- data/VERSION +1 -0
- data/ext/tesseract_bin/extconf.rb +17 -0
- data/lib/tesseract_bin.rb +12 -0
- data/tesseract_bin.gemspec +660 -0
- data/test/helper.rb +18 -0
- data/test/test_tesseract_bin.rb +7 -0
- data/vendor/tesseract-2.04/AUTHORS +8 -0
- data/vendor/tesseract-2.04/COPYING +23 -0
- data/vendor/tesseract-2.04/ChangeLog +71 -0
- data/vendor/tesseract-2.04/INSTALL +229 -0
- data/vendor/tesseract-2.04/Makefile.am +20 -0
- data/vendor/tesseract-2.04/Makefile.in +641 -0
- data/vendor/tesseract-2.04/NEWS +1 -0
- data/vendor/tesseract-2.04/README +138 -0
- data/vendor/tesseract-2.04/ReleaseNotes +213 -0
- data/vendor/tesseract-2.04/StdAfx.cpp +8 -0
- data/vendor/tesseract-2.04/StdAfx.h +24 -0
- data/vendor/tesseract-2.04/ccmain/Makefile.am +63 -0
- data/vendor/tesseract-2.04/ccmain/Makefile.in +735 -0
- data/vendor/tesseract-2.04/ccmain/adaptions.cpp +1082 -0
- data/vendor/tesseract-2.04/ccmain/adaptions.h +109 -0
- data/vendor/tesseract-2.04/ccmain/applybox.cpp +891 -0
- data/vendor/tesseract-2.04/ccmain/applybox.h +73 -0
- data/vendor/tesseract-2.04/ccmain/baseapi.cpp +1105 -0
- data/vendor/tesseract-2.04/ccmain/baseapi.h +256 -0
- data/vendor/tesseract-2.04/ccmain/blobcmp.cpp +76 -0
- data/vendor/tesseract-2.04/ccmain/blobcmp.h +29 -0
- data/vendor/tesseract-2.04/ccmain/callnet.cpp +93 -0
- data/vendor/tesseract-2.04/ccmain/callnet.h +32 -0
- data/vendor/tesseract-2.04/ccmain/charcut.cpp +704 -0
- data/vendor/tesseract-2.04/ccmain/charcut.h +120 -0
- data/vendor/tesseract-2.04/ccmain/charsample.cpp +699 -0
- data/vendor/tesseract-2.04/ccmain/control.cpp +1842 -0
- data/vendor/tesseract-2.04/ccmain/control.h +198 -0
- data/vendor/tesseract-2.04/ccmain/docqual.cpp +1481 -0
- data/vendor/tesseract-2.04/ccmain/docqual.h +155 -0
- data/vendor/tesseract-2.04/ccmain/expandblob.cpp +82 -0
- data/vendor/tesseract-2.04/ccmain/expandblob.h +13 -0
- data/vendor/tesseract-2.04/ccmain/fixspace.cpp +989 -0
- data/vendor/tesseract-2.04/ccmain/fixspace.h +72 -0
- data/vendor/tesseract-2.04/ccmain/fixxht.cpp +825 -0
- data/vendor/tesseract-2.04/ccmain/fixxht.h +93 -0
- data/vendor/tesseract-2.04/ccmain/imgscale.cpp +154 -0
- data/vendor/tesseract-2.04/ccmain/imgscale.h +32 -0
- data/vendor/tesseract-2.04/ccmain/matmatch.cpp +391 -0
- data/vendor/tesseract-2.04/ccmain/matmatch.h +48 -0
- data/vendor/tesseract-2.04/ccmain/output.cpp +1273 -0
- data/vendor/tesseract-2.04/ccmain/output.h +116 -0
- data/vendor/tesseract-2.04/ccmain/pagewalk.cpp +666 -0
- data/vendor/tesseract-2.04/ccmain/pagewalk.h +155 -0
- data/vendor/tesseract-2.04/ccmain/paircmp.cpp +107 -0
- data/vendor/tesseract-2.04/ccmain/paircmp.h +43 -0
- data/vendor/tesseract-2.04/ccmain/pgedit.cpp +1867 -0
- data/vendor/tesseract-2.04/ccmain/pgedit.h +181 -0
- data/vendor/tesseract-2.04/ccmain/reject.cpp +1775 -0
- data/vendor/tesseract-2.04/ccmain/reject.h +181 -0
- data/vendor/tesseract-2.04/ccmain/scaleimg.cpp +366 -0
- data/vendor/tesseract-2.04/ccmain/scaleimg.h +35 -0
- data/vendor/tesseract-2.04/ccmain/tessbox.cpp +375 -0
- data/vendor/tesseract-2.04/ccmain/tessbox.h +110 -0
- data/vendor/tesseract-2.04/ccmain/tessedit.cpp +278 -0
- data/vendor/tesseract-2.04/ccmain/tessedit.h +49 -0
- data/vendor/tesseract-2.04/ccmain/tessembedded.cpp +110 -0
- data/vendor/tesseract-2.04/ccmain/tessembedded.h +38 -0
- data/vendor/tesseract-2.04/ccmain/tesseractfull.cc +37 -0
- data/vendor/tesseract-2.04/ccmain/tesseractmain.cpp +387 -0
- data/vendor/tesseract-2.04/ccmain/tesseractmain.h +58 -0
- data/vendor/tesseract-2.04/ccmain/tessio.h +110 -0
- data/vendor/tesseract-2.04/ccmain/tessvars.cpp +38 -0
- data/vendor/tesseract-2.04/ccmain/tessvars.h +48 -0
- data/vendor/tesseract-2.04/ccmain/tfacep.h +62 -0
- data/vendor/tesseract-2.04/ccmain/tfacepp.cpp +443 -0
- data/vendor/tesseract-2.04/ccmain/tfacepp.h +85 -0
- data/vendor/tesseract-2.04/ccmain/tstruct.cpp +549 -0
- data/vendor/tesseract-2.04/ccmain/tstruct.h +108 -0
- data/vendor/tesseract-2.04/ccmain/varabled.cpp +346 -0
- data/vendor/tesseract-2.04/ccmain/varabled.h +125 -0
- data/vendor/tesseract-2.04/ccmain/werdit.cpp +193 -0
- data/vendor/tesseract-2.04/ccmain/werdit.h +67 -0
- data/vendor/tesseract-2.04/ccstruct/Makefile.am +25 -0
- data/vendor/tesseract-2.04/ccstruct/Makefile.in +650 -0
- data/vendor/tesseract-2.04/ccstruct/blckerr.h +29 -0
- data/vendor/tesseract-2.04/ccstruct/blobbox.cpp +778 -0
- data/vendor/tesseract-2.04/ccstruct/blobbox.h +381 -0
- data/vendor/tesseract-2.04/ccstruct/blobs.cpp +247 -0
- data/vendor/tesseract-2.04/ccstruct/blobs.h +119 -0
- data/vendor/tesseract-2.04/ccstruct/blread.cpp +537 -0
- data/vendor/tesseract-2.04/ccstruct/blread.h +63 -0
- data/vendor/tesseract-2.04/ccstruct/callcpp.cpp +252 -0
- data/vendor/tesseract-2.04/ccstruct/coutln.cpp +650 -0
- data/vendor/tesseract-2.04/ccstruct/coutln.h +186 -0
- data/vendor/tesseract-2.04/ccstruct/crakedge.h +39 -0
- data/vendor/tesseract-2.04/ccstruct/genblob.cpp +133 -0
- data/vendor/tesseract-2.04/ccstruct/genblob.h +52 -0
- data/vendor/tesseract-2.04/ccstruct/hpddef.h +39 -0
- data/vendor/tesseract-2.04/ccstruct/hpdsizes.h +8 -0
- data/vendor/tesseract-2.04/ccstruct/ipoints.h +479 -0
- data/vendor/tesseract-2.04/ccstruct/labls.cpp +188 -0
- data/vendor/tesseract-2.04/ccstruct/labls.h +38 -0
- data/vendor/tesseract-2.04/ccstruct/linlsq.cpp +249 -0
- data/vendor/tesseract-2.04/ccstruct/linlsq.h +102 -0
- data/vendor/tesseract-2.04/ccstruct/lmedsq.cpp +453 -0
- data/vendor/tesseract-2.04/ccstruct/lmedsq.h +84 -0
- data/vendor/tesseract-2.04/ccstruct/mod128.cpp +100 -0
- data/vendor/tesseract-2.04/ccstruct/mod128.h +85 -0
- data/vendor/tesseract-2.04/ccstruct/normalis.cpp +176 -0
- data/vendor/tesseract-2.04/ccstruct/normalis.h +108 -0
- data/vendor/tesseract-2.04/ccstruct/ocrblock.cpp +369 -0
- data/vendor/tesseract-2.04/ccstruct/ocrblock.h +235 -0
- data/vendor/tesseract-2.04/ccstruct/ocrrow.cpp +216 -0
- data/vendor/tesseract-2.04/ccstruct/ocrrow.h +133 -0
- data/vendor/tesseract-2.04/ccstruct/pageblk.cpp +879 -0
- data/vendor/tesseract-2.04/ccstruct/pageblk.h +318 -0
- data/vendor/tesseract-2.04/ccstruct/pageres.cpp +330 -0
- data/vendor/tesseract-2.04/ccstruct/pageres.h +313 -0
- data/vendor/tesseract-2.04/ccstruct/pdblock.cpp +361 -0
- data/vendor/tesseract-2.04/ccstruct/pdblock.h +181 -0
- data/vendor/tesseract-2.04/ccstruct/pdclass.h +54 -0
- data/vendor/tesseract-2.04/ccstruct/points.cpp +102 -0
- data/vendor/tesseract-2.04/ccstruct/points.h +299 -0
- data/vendor/tesseract-2.04/ccstruct/polyaprx.cpp +588 -0
- data/vendor/tesseract-2.04/ccstruct/polyaprx.h +51 -0
- data/vendor/tesseract-2.04/ccstruct/polyblk.cpp +398 -0
- data/vendor/tesseract-2.04/ccstruct/polyblk.h +122 -0
- data/vendor/tesseract-2.04/ccstruct/polyblob.cpp +357 -0
- data/vendor/tesseract-2.04/ccstruct/polyblob.h +102 -0
- data/vendor/tesseract-2.04/ccstruct/polyvert.cpp +23 -0
- data/vendor/tesseract-2.04/ccstruct/polyvert.h +58 -0
- data/vendor/tesseract-2.04/ccstruct/poutline.cpp +441 -0
- data/vendor/tesseract-2.04/ccstruct/poutline.h +125 -0
- data/vendor/tesseract-2.04/ccstruct/quadlsq.cpp +147 -0
- data/vendor/tesseract-2.04/ccstruct/quadlsq.h +67 -0
- data/vendor/tesseract-2.04/ccstruct/quadratc.cpp +21 -0
- data/vendor/tesseract-2.04/ccstruct/quadratc.h +63 -0
- data/vendor/tesseract-2.04/ccstruct/quspline.cpp +382 -0
- data/vendor/tesseract-2.04/ccstruct/quspline.h +113 -0
- data/vendor/tesseract-2.04/ccstruct/ratngs.cpp +372 -0
- data/vendor/tesseract-2.04/ccstruct/ratngs.h +198 -0
- data/vendor/tesseract-2.04/ccstruct/rect.cpp +229 -0
- data/vendor/tesseract-2.04/ccstruct/rect.h +320 -0
- data/vendor/tesseract-2.04/ccstruct/rejctmap.cpp +545 -0
- data/vendor/tesseract-2.04/ccstruct/rejctmap.h +284 -0
- data/vendor/tesseract-2.04/ccstruct/rwpoly.cpp +89 -0
- data/vendor/tesseract-2.04/ccstruct/rwpoly.h +45 -0
- data/vendor/tesseract-2.04/ccstruct/statistc.cpp +905 -0
- data/vendor/tesseract-2.04/ccstruct/statistc.h +135 -0
- data/vendor/tesseract-2.04/ccstruct/stepblob.cpp +296 -0
- data/vendor/tesseract-2.04/ccstruct/stepblob.h +88 -0
- data/vendor/tesseract-2.04/ccstruct/txtregn.cpp +230 -0
- data/vendor/tesseract-2.04/ccstruct/txtregn.h +155 -0
- data/vendor/tesseract-2.04/ccstruct/vecfuncs.cpp +63 -0
- data/vendor/tesseract-2.04/ccstruct/vecfuncs.h +91 -0
- data/vendor/tesseract-2.04/ccstruct/werd.cpp +967 -0
- data/vendor/tesseract-2.04/ccstruct/werd.h +277 -0
- data/vendor/tesseract-2.04/ccutil/Makefile.am +19 -0
- data/vendor/tesseract-2.04/ccutil/Makefile.in +626 -0
- data/vendor/tesseract-2.04/ccutil/basedir.cpp +118 -0
- data/vendor/tesseract-2.04/ccutil/basedir.h +32 -0
- data/vendor/tesseract-2.04/ccutil/bits16.cpp +30 -0
- data/vendor/tesseract-2.04/ccutil/bits16.h +61 -0
- data/vendor/tesseract-2.04/ccutil/boxread.cpp +105 -0
- data/vendor/tesseract-2.04/ccutil/boxread.h +44 -0
- data/vendor/tesseract-2.04/ccutil/clst.cpp +626 -0
- data/vendor/tesseract-2.04/ccutil/clst.h +1085 -0
- data/vendor/tesseract-2.04/ccutil/debugwin.cpp +500 -0
- data/vendor/tesseract-2.04/ccutil/debugwin.h +103 -0
- data/vendor/tesseract-2.04/ccutil/elst.cpp +593 -0
- data/vendor/tesseract-2.04/ccutil/elst.h +1125 -0
- data/vendor/tesseract-2.04/ccutil/elst2.cpp +606 -0
- data/vendor/tesseract-2.04/ccutil/elst2.h +1121 -0
- data/vendor/tesseract-2.04/ccutil/errcode.cpp +104 -0
- data/vendor/tesseract-2.04/ccutil/errcode.h +104 -0
- data/vendor/tesseract-2.04/ccutil/fileerr.h +34 -0
- data/vendor/tesseract-2.04/ccutil/globaloc.cpp +115 -0
- data/vendor/tesseract-2.04/ccutil/globaloc.h +40 -0
- data/vendor/tesseract-2.04/ccutil/hashfn.cpp +57 -0
- data/vendor/tesseract-2.04/ccutil/hashfn.h +30 -0
- data/vendor/tesseract-2.04/ccutil/host.h +180 -0
- data/vendor/tesseract-2.04/ccutil/hosthplb.h +1 -0
- data/vendor/tesseract-2.04/ccutil/lsterr.h +43 -0
- data/vendor/tesseract-2.04/ccutil/mainblk.cpp +126 -0
- data/vendor/tesseract-2.04/ccutil/mainblk.h +39 -0
- data/vendor/tesseract-2.04/ccutil/memblk.cpp +1106 -0
- data/vendor/tesseract-2.04/ccutil/memblk.h +189 -0
- data/vendor/tesseract-2.04/ccutil/memry.cpp +532 -0
- data/vendor/tesseract-2.04/ccutil/memry.h +192 -0
- data/vendor/tesseract-2.04/ccutil/memryerr.h +38 -0
- data/vendor/tesseract-2.04/ccutil/mfcpch.cpp +5 -0
- data/vendor/tesseract-2.04/ccutil/mfcpch.h +37 -0
- data/vendor/tesseract-2.04/ccutil/ndminx.h +31 -0
- data/vendor/tesseract-2.04/ccutil/notdll.h +28 -0
- data/vendor/tesseract-2.04/ccutil/nwmain.h +176 -0
- data/vendor/tesseract-2.04/ccutil/ocrclass.h +345 -0
- data/vendor/tesseract-2.04/ccutil/ocrshell.cpp +772 -0
- data/vendor/tesseract-2.04/ccutil/ocrshell.h +191 -0
- data/vendor/tesseract-2.04/ccutil/platform.h +18 -0
- data/vendor/tesseract-2.04/ccutil/scanutils.cpp +543 -0
- data/vendor/tesseract-2.04/ccutil/scanutils.h +55 -0
- data/vendor/tesseract-2.04/ccutil/secname.h +9 -0
- data/vendor/tesseract-2.04/ccutil/serialis.cpp +117 -0
- data/vendor/tesseract-2.04/ccutil/serialis.h +93 -0
- data/vendor/tesseract-2.04/ccutil/stderr.h +26 -0
- data/vendor/tesseract-2.04/ccutil/strngs.cpp +495 -0
- data/vendor/tesseract-2.04/ccutil/strngs.h +138 -0
- data/vendor/tesseract-2.04/ccutil/tessclas.h +135 -0
- data/vendor/tesseract-2.04/ccutil/tessopt.cpp +61 -0
- data/vendor/tesseract-2.04/ccutil/tessopt.h +30 -0
- data/vendor/tesseract-2.04/ccutil/tprintf.cpp +122 -0
- data/vendor/tesseract-2.04/ccutil/tprintf.h +35 -0
- data/vendor/tesseract-2.04/ccutil/unichar.cpp +144 -0
- data/vendor/tesseract-2.04/ccutil/unichar.h +84 -0
- data/vendor/tesseract-2.04/ccutil/unicharmap.cpp +172 -0
- data/vendor/tesseract-2.04/ccutil/unicharmap.h +82 -0
- data/vendor/tesseract-2.04/ccutil/unicharset.cpp +307 -0
- data/vendor/tesseract-2.04/ccutil/unicharset.h +267 -0
- data/vendor/tesseract-2.04/ccutil/varable.cpp +672 -0
- data/vendor/tesseract-2.04/ccutil/varable.h +419 -0
- data/vendor/tesseract-2.04/classify/Makefile.am +24 -0
- data/vendor/tesseract-2.04/classify/Makefile.in +647 -0
- data/vendor/tesseract-2.04/classify/adaptive.cpp +535 -0
- data/vendor/tesseract-2.04/classify/adaptive.h +199 -0
- data/vendor/tesseract-2.04/classify/adaptmatch.cpp +2958 -0
- data/vendor/tesseract-2.04/classify/adaptmatch.h +86 -0
- data/vendor/tesseract-2.04/classify/baseline.cpp +58 -0
- data/vendor/tesseract-2.04/classify/baseline.h +91 -0
- data/vendor/tesseract-2.04/classify/blobclass.cpp +123 -0
- data/vendor/tesseract-2.04/classify/blobclass.h +49 -0
- data/vendor/tesseract-2.04/classify/chartoname.cpp +74 -0
- data/vendor/tesseract-2.04/classify/chartoname.h +21 -0
- data/vendor/tesseract-2.04/classify/cluster.cpp +2834 -0
- data/vendor/tesseract-2.04/classify/cluster.h +158 -0
- data/vendor/tesseract-2.04/classify/clusttool.cpp +507 -0
- data/vendor/tesseract-2.04/classify/clusttool.h +70 -0
- data/vendor/tesseract-2.04/classify/cutoffs.cpp +73 -0
- data/vendor/tesseract-2.04/classify/cutoffs.h +49 -0
- data/vendor/tesseract-2.04/classify/extern.h +32 -0
- data/vendor/tesseract-2.04/classify/extract.cpp +100 -0
- data/vendor/tesseract-2.04/classify/extract.h +36 -0
- data/vendor/tesseract-2.04/classify/featdefs.cpp +244 -0
- data/vendor/tesseract-2.04/classify/featdefs.h +71 -0
- data/vendor/tesseract-2.04/classify/flexfx.cpp +87 -0
- data/vendor/tesseract-2.04/classify/flexfx.h +34 -0
- data/vendor/tesseract-2.04/classify/float2int.cpp +126 -0
- data/vendor/tesseract-2.04/classify/float2int.h +65 -0
- data/vendor/tesseract-2.04/classify/fpoint.cpp +73 -0
- data/vendor/tesseract-2.04/classify/fpoint.h +63 -0
- data/vendor/tesseract-2.04/classify/fxdefs.cpp +74 -0
- data/vendor/tesseract-2.04/classify/fxdefs.h +93 -0
- data/vendor/tesseract-2.04/classify/fxid.h +69 -0
- data/vendor/tesseract-2.04/classify/hideedge.cpp +35 -0
- data/vendor/tesseract-2.04/classify/hideedge.h +76 -0
- data/vendor/tesseract-2.04/classify/intfx.cpp +608 -0
- data/vendor/tesseract-2.04/classify/intfx.h +63 -0
- data/vendor/tesseract-2.04/classify/intmatcher.cpp +1524 -0
- data/vendor/tesseract-2.04/classify/intmatcher.h +199 -0
- data/vendor/tesseract-2.04/classify/intproto.cpp +1823 -0
- data/vendor/tesseract-2.04/classify/intproto.h +320 -0
- data/vendor/tesseract-2.04/classify/kdtree.cpp +884 -0
- data/vendor/tesseract-2.04/classify/kdtree.h +118 -0
- data/vendor/tesseract-2.04/classify/mf.cpp +106 -0
- data/vendor/tesseract-2.04/classify/mf.h +43 -0
- data/vendor/tesseract-2.04/classify/mfdefs.cpp +58 -0
- data/vendor/tesseract-2.04/classify/mfdefs.h +60 -0
- data/vendor/tesseract-2.04/classify/mfoutline.cpp +1087 -0
- data/vendor/tesseract-2.04/classify/mfoutline.h +277 -0
- data/vendor/tesseract-2.04/classify/mfx.cpp +436 -0
- data/vendor/tesseract-2.04/classify/mfx.h +52 -0
- data/vendor/tesseract-2.04/classify/normfeat.cpp +132 -0
- data/vendor/tesseract-2.04/classify/normfeat.h +63 -0
- data/vendor/tesseract-2.04/classify/normmatch.cpp +305 -0
- data/vendor/tesseract-2.04/classify/normmatch.h +38 -0
- data/vendor/tesseract-2.04/classify/ocrfeatures.cpp +310 -0
- data/vendor/tesseract-2.04/classify/ocrfeatures.h +148 -0
- data/vendor/tesseract-2.04/classify/outfeat.cpp +262 -0
- data/vendor/tesseract-2.04/classify/outfeat.h +76 -0
- data/vendor/tesseract-2.04/classify/picofeat.cpp +297 -0
- data/vendor/tesseract-2.04/classify/picofeat.h +65 -0
- data/vendor/tesseract-2.04/classify/protos.cpp +472 -0
- data/vendor/tesseract-2.04/classify/protos.h +258 -0
- data/vendor/tesseract-2.04/classify/sigmenu.cpp +225 -0
- data/vendor/tesseract-2.04/classify/sigmenu.h +39 -0
- data/vendor/tesseract-2.04/classify/speckle.cpp +127 -0
- data/vendor/tesseract-2.04/classify/speckle.h +69 -0
- data/vendor/tesseract-2.04/classify/xform2d.cpp +120 -0
- data/vendor/tesseract-2.04/classify/xform2d.h +60 -0
- data/vendor/tesseract-2.04/config/config.guess +1466 -0
- data/vendor/tesseract-2.04/config/config.h.in +188 -0
- data/vendor/tesseract-2.04/config/config.sub +1579 -0
- data/vendor/tesseract-2.04/config/depcomp +530 -0
- data/vendor/tesseract-2.04/config/install-sh +269 -0
- data/vendor/tesseract-2.04/config/missing +198 -0
- data/vendor/tesseract-2.04/config/mkinstalldirs +40 -0
- data/vendor/tesseract-2.04/config/stamp-h.in +0 -0
- data/vendor/tesseract-2.04/configure +10424 -0
- data/vendor/tesseract-2.04/cutil/Makefile.am +14 -0
- data/vendor/tesseract-2.04/cutil/Makefile.in +612 -0
- data/vendor/tesseract-2.04/cutil/bitvec.cpp +115 -0
- data/vendor/tesseract-2.04/cutil/bitvec.h +100 -0
- data/vendor/tesseract-2.04/cutil/callcpp.h +190 -0
- data/vendor/tesseract-2.04/cutil/const.h +108 -0
- data/vendor/tesseract-2.04/cutil/cutil.cpp +92 -0
- data/vendor/tesseract-2.04/cutil/cutil.h +159 -0
- data/vendor/tesseract-2.04/cutil/danerror.cpp +144 -0
- data/vendor/tesseract-2.04/cutil/danerror.h +41 -0
- data/vendor/tesseract-2.04/cutil/debug.cpp +97 -0
- data/vendor/tesseract-2.04/cutil/debug.h +348 -0
- data/vendor/tesseract-2.04/cutil/efio.cpp +62 -0
- data/vendor/tesseract-2.04/cutil/efio.h +32 -0
- data/vendor/tesseract-2.04/cutil/emalloc.cpp +91 -0
- data/vendor/tesseract-2.04/cutil/emalloc.h +44 -0
- data/vendor/tesseract-2.04/cutil/freelist.cpp +75 -0
- data/vendor/tesseract-2.04/cutil/freelist.h +45 -0
- data/vendor/tesseract-2.04/cutil/funcdefs.h +35 -0
- data/vendor/tesseract-2.04/cutil/general.h +33 -0
- data/vendor/tesseract-2.04/cutil/globals.cpp +69 -0
- data/vendor/tesseract-2.04/cutil/globals.h +70 -0
- data/vendor/tesseract-2.04/cutil/listio.cpp +68 -0
- data/vendor/tesseract-2.04/cutil/listio.h +43 -0
- data/vendor/tesseract-2.04/cutil/minmax.h +40 -0
- data/vendor/tesseract-2.04/cutil/oldheap.cpp +337 -0
- data/vendor/tesseract-2.04/cutil/oldheap.h +126 -0
- data/vendor/tesseract-2.04/cutil/oldlist.cpp +393 -0
- data/vendor/tesseract-2.04/cutil/oldlist.h +350 -0
- data/vendor/tesseract-2.04/cutil/structures.cpp +66 -0
- data/vendor/tesseract-2.04/cutil/structures.h +112 -0
- data/vendor/tesseract-2.04/cutil/tessarray.cpp +115 -0
- data/vendor/tesseract-2.04/cutil/tessarray.h +166 -0
- data/vendor/tesseract-2.04/cutil/tordvars.cpp +95 -0
- data/vendor/tesseract-2.04/cutil/tordvars.h +61 -0
- data/vendor/tesseract-2.04/cutil/variables.cpp +317 -0
- data/vendor/tesseract-2.04/cutil/variables.h +170 -0
- data/vendor/tesseract-2.04/dict/Makefile.am +13 -0
- data/vendor/tesseract-2.04/dict/Makefile.in +609 -0
- data/vendor/tesseract-2.04/dict/choicearr.h +96 -0
- data/vendor/tesseract-2.04/dict/choices.cpp +210 -0
- data/vendor/tesseract-2.04/dict/choices.h +241 -0
- data/vendor/tesseract-2.04/dict/context.cpp +270 -0
- data/vendor/tesseract-2.04/dict/context.h +82 -0
- data/vendor/tesseract-2.04/dict/dawg.cpp +363 -0
- data/vendor/tesseract-2.04/dict/dawg.h +394 -0
- data/vendor/tesseract-2.04/dict/hyphen.cpp +84 -0
- data/vendor/tesseract-2.04/dict/hyphen.h +125 -0
- data/vendor/tesseract-2.04/dict/lookdawg.cpp +228 -0
- data/vendor/tesseract-2.04/dict/lookdawg.h +76 -0
- data/vendor/tesseract-2.04/dict/makedawg.cpp +449 -0
- data/vendor/tesseract-2.04/dict/makedawg.h +83 -0
- data/vendor/tesseract-2.04/dict/matchdefs.h +145 -0
- data/vendor/tesseract-2.04/dict/permdawg.cpp +415 -0
- data/vendor/tesseract-2.04/dict/permdawg.h +98 -0
- data/vendor/tesseract-2.04/dict/permngram.cpp +358 -0
- data/vendor/tesseract-2.04/dict/permngram.h +33 -0
- data/vendor/tesseract-2.04/dict/permnum.cpp +522 -0
- data/vendor/tesseract-2.04/dict/permnum.h +83 -0
- data/vendor/tesseract-2.04/dict/permute.cpp +1704 -0
- data/vendor/tesseract-2.04/dict/permute.h +93 -0
- data/vendor/tesseract-2.04/dict/reduce.cpp +424 -0
- data/vendor/tesseract-2.04/dict/reduce.h +112 -0
- data/vendor/tesseract-2.04/dict/states.cpp +382 -0
- data/vendor/tesseract-2.04/dict/states.h +111 -0
- data/vendor/tesseract-2.04/dict/stopper.cpp +1458 -0
- data/vendor/tesseract-2.04/dict/stopper.h +103 -0
- data/vendor/tesseract-2.04/dict/trie.cpp +683 -0
- data/vendor/tesseract-2.04/dict/trie.h +190 -0
- data/vendor/tesseract-2.04/dlltest/Makefile.am +2 -0
- data/vendor/tesseract-2.04/dlltest/Makefile.in +388 -0
- data/vendor/tesseract-2.04/dlltest/dlltest.cpp +163 -0
- data/vendor/tesseract-2.04/dlltest/dlltest.dsp +186 -0
- data/vendor/tesseract-2.04/dlltest/dlltest.vcproj +637 -0
- data/vendor/tesseract-2.04/eurotext.tif +0 -0
- data/vendor/tesseract-2.04/image/Makefile.am +10 -0
- data/vendor/tesseract-2.04/image/Makefile.in +596 -0
- data/vendor/tesseract-2.04/image/bitstrm.cpp +157 -0
- data/vendor/tesseract-2.04/image/bitstrm.h +73 -0
- data/vendor/tesseract-2.04/image/img.h +336 -0
- data/vendor/tesseract-2.04/image/imgbmp.cpp +223 -0
- data/vendor/tesseract-2.04/image/imgbmp.h +50 -0
- data/vendor/tesseract-2.04/image/imgerrs.h +35 -0
- data/vendor/tesseract-2.04/image/imgio.cpp +321 -0
- data/vendor/tesseract-2.04/image/imgio.h +22 -0
- data/vendor/tesseract-2.04/image/imgs.cpp +1764 -0
- data/vendor/tesseract-2.04/image/imgs.h +102 -0
- data/vendor/tesseract-2.04/image/imgtiff.cpp +723 -0
- data/vendor/tesseract-2.04/image/imgtiff.h +89 -0
- data/vendor/tesseract-2.04/image/imgunpk.h +1377 -0
- data/vendor/tesseract-2.04/image/svshowim.cpp +40 -0
- data/vendor/tesseract-2.04/image/svshowim.h +25 -0
- data/vendor/tesseract-2.04/java/Makefile.am +4 -0
- data/vendor/tesseract-2.04/java/Makefile.in +473 -0
- data/vendor/tesseract-2.04/java/com/Makefile.am +1 -0
- data/vendor/tesseract-2.04/java/com/Makefile.in +470 -0
- data/vendor/tesseract-2.04/java/com/google/Makefile.am +1 -0
- data/vendor/tesseract-2.04/java/com/google/Makefile.in +470 -0
- data/vendor/tesseract-2.04/java/com/google/scrollview/Makefile.am +4 -0
- data/vendor/tesseract-2.04/java/com/google/scrollview/Makefile.in +473 -0
- data/vendor/tesseract-2.04/java/com/google/scrollview/ScrollView.java +421 -0
- data/vendor/tesseract-2.04/java/com/google/scrollview/events/Makefile.am +5 -0
- data/vendor/tesseract-2.04/java/com/google/scrollview/events/Makefile.in +474 -0
- data/vendor/tesseract-2.04/java/com/google/scrollview/events/SVEvent.java +87 -0
- data/vendor/tesseract-2.04/java/com/google/scrollview/events/SVEventHandler.java +296 -0
- data/vendor/tesseract-2.04/java/com/google/scrollview/events/SVEventType.java +31 -0
- data/vendor/tesseract-2.04/java/com/google/scrollview/ui/Makefile.am +7 -0
- data/vendor/tesseract-2.04/java/com/google/scrollview/ui/Makefile.in +476 -0
- data/vendor/tesseract-2.04/java/com/google/scrollview/ui/SVAbstractMenuItem.java +58 -0
- data/vendor/tesseract-2.04/java/com/google/scrollview/ui/SVCheckboxMenuItem.java +60 -0
- data/vendor/tesseract-2.04/java/com/google/scrollview/ui/SVEmptyMenuItem.java +48 -0
- data/vendor/tesseract-2.04/java/com/google/scrollview/ui/SVImageHandler.java +228 -0
- data/vendor/tesseract-2.04/java/com/google/scrollview/ui/SVMenuBar.java +130 -0
- data/vendor/tesseract-2.04/java/com/google/scrollview/ui/SVMenuItem.java +61 -0
- data/vendor/tesseract-2.04/java/com/google/scrollview/ui/SVPopupMenu.java +142 -0
- data/vendor/tesseract-2.04/java/com/google/scrollview/ui/SVSubMenuItem.java +41 -0
- data/vendor/tesseract-2.04/java/com/google/scrollview/ui/SVWindow.java +643 -0
- data/vendor/tesseract-2.04/java/makefile +55 -0
- data/vendor/tesseract-2.04/pageseg/Makefile.am +13 -0
- data/vendor/tesseract-2.04/pageseg/Makefile.in +596 -0
- data/vendor/tesseract-2.04/pageseg/leptonica_pageseg.cpp +363 -0
- data/vendor/tesseract-2.04/pageseg/leptonica_pageseg.h +90 -0
- data/vendor/tesseract-2.04/pageseg/leptonica_pageseg_interface.cpp +82 -0
- data/vendor/tesseract-2.04/pageseg/leptonica_pageseg_interface.h +30 -0
- data/vendor/tesseract-2.04/pageseg/pageseg.cpp +170 -0
- data/vendor/tesseract-2.04/pageseg/pageseg.h +29 -0
- data/vendor/tesseract-2.04/phototest.tif +0 -0
- data/vendor/tesseract-2.04/tessdata/Makefile.am +31 -0
- data/vendor/tesseract-2.04/tessdata/Makefile.in +529 -0
- data/vendor/tesseract-2.04/tessdata/configs/Makefile.am +3 -0
- data/vendor/tesseract-2.04/tessdata/configs/Makefile.in +344 -0
- data/vendor/tesseract-2.04/tessdata/configs/api_config +1 -0
- data/vendor/tesseract-2.04/tessdata/configs/box.train +19 -0
- data/vendor/tesseract-2.04/tessdata/configs/box.train.stderr +18 -0
- data/vendor/tesseract-2.04/tessdata/configs/inter +4 -0
- data/vendor/tesseract-2.04/tessdata/configs/kannada +4 -0
- data/vendor/tesseract-2.04/tessdata/configs/makebox +1 -0
- data/vendor/tesseract-2.04/tessdata/configs/unlv +3 -0
- data/vendor/tesseract-2.04/tessdata/confsets +3 -0
- data/vendor/tesseract-2.04/tessdata/eng.DangAmbigs +39 -0
- data/vendor/tesseract-2.04/tessdata/eng.freq-dawg +0 -0
- data/vendor/tesseract-2.04/tessdata/eng.inttemp +0 -0
- data/vendor/tesseract-2.04/tessdata/eng.normproto +1247 -0
- data/vendor/tesseract-2.04/tessdata/eng.pffmtable +111 -0
- data/vendor/tesseract-2.04/tessdata/eng.unicharset +113 -0
- data/vendor/tesseract-2.04/tessdata/eng.user-words +921 -0
- data/vendor/tesseract-2.04/tessdata/eng.word-dawg +0 -0
- data/vendor/tesseract-2.04/tessdata/makedummies +8 -0
- data/vendor/tesseract-2.04/tessdata/tessconfigs/Makefile.am +3 -0
- data/vendor/tesseract-2.04/tessdata/tessconfigs/Makefile.in +344 -0
- data/vendor/tesseract-2.04/tessdata/tessconfigs/batch +2 -0
- data/vendor/tesseract-2.04/tessdata/tessconfigs/batch.nochop +2 -0
- data/vendor/tesseract-2.04/tessdata/tessconfigs/matdemo +7 -0
- data/vendor/tesseract-2.04/tessdata/tessconfigs/msdemo +13 -0
- data/vendor/tesseract-2.04/tessdata/tessconfigs/nobatch +2 -0
- data/vendor/tesseract-2.04/tessdata/tessconfigs/segdemo +9 -0
- data/vendor/tesseract-2.04/tessdll.cpp +351 -0
- data/vendor/tesseract-2.04/tessdll.dsp +2050 -0
- data/vendor/tesseract-2.04/tessdll.h +143 -0
- data/vendor/tesseract-2.04/tessdll.vcproj +5495 -0
- data/vendor/tesseract-2.04/tesseract.dsp +2124 -0
- data/vendor/tesseract-2.04/tesseract.dsw +116 -0
- data/vendor/tesseract-2.04/tesseract.sln +59 -0
- data/vendor/tesseract-2.04/tesseract.spec +188 -0
- data/vendor/tesseract-2.04/tesseract.vcproj +5859 -0
- data/vendor/tesseract-2.04/testing/Makefile.am +2 -0
- data/vendor/tesseract-2.04/testing/Makefile.in +312 -0
- data/vendor/tesseract-2.04/testing/README +43 -0
- data/vendor/tesseract-2.04/testing/counttestset.sh +61 -0
- data/vendor/tesseract-2.04/testing/reorgdata.sh +44 -0
- data/vendor/tesseract-2.04/testing/reports/1995.bus.3B.sum +1 -0
- data/vendor/tesseract-2.04/testing/reports/1995.doe3.3B.sum +1 -0
- data/vendor/tesseract-2.04/testing/reports/1995.mag.3B.sum +1 -0
- data/vendor/tesseract-2.04/testing/reports/1995.news.3B.sum +1 -0
- data/vendor/tesseract-2.04/testing/reports/2.03.summary +9 -0
- data/vendor/tesseract-2.04/testing/reports/2.04.summary +9 -0
- data/vendor/tesseract-2.04/testing/runalltests.sh +110 -0
- data/vendor/tesseract-2.04/testing/runtestset.sh +61 -0
- data/vendor/tesseract-2.04/textord/Makefile.am +20 -0
- data/vendor/tesseract-2.04/textord/Makefile.in +624 -0
- data/vendor/tesseract-2.04/textord/blkocc.cpp +809 -0
- data/vendor/tesseract-2.04/textord/blkocc.h +327 -0
- data/vendor/tesseract-2.04/textord/blobcmpl.h +31 -0
- data/vendor/tesseract-2.04/textord/drawedg.cpp +77 -0
- data/vendor/tesseract-2.04/textord/drawedg.h +34 -0
- data/vendor/tesseract-2.04/textord/drawtord.cpp +469 -0
- data/vendor/tesseract-2.04/textord/drawtord.h +107 -0
- data/vendor/tesseract-2.04/textord/edgblob.cpp +412 -0
- data/vendor/tesseract-2.04/textord/edgblob.h +100 -0
- data/vendor/tesseract-2.04/textord/edgloop.cpp +211 -0
- data/vendor/tesseract-2.04/textord/edgloop.h +66 -0
- data/vendor/tesseract-2.04/textord/fpchop.cpp +1641 -0
- data/vendor/tesseract-2.04/textord/fpchop.h +238 -0
- data/vendor/tesseract-2.04/textord/gap_map.cpp +166 -0
- data/vendor/tesseract-2.04/textord/gap_map.h +40 -0
- data/vendor/tesseract-2.04/textord/makerow.cpp +2628 -0
- data/vendor/tesseract-2.04/textord/makerow.h +295 -0
- data/vendor/tesseract-2.04/textord/oldbasel.cpp +1761 -0
- data/vendor/tesseract-2.04/textord/oldbasel.h +195 -0
- data/vendor/tesseract-2.04/textord/pithsync.cpp +696 -0
- data/vendor/tesseract-2.04/textord/pithsync.h +134 -0
- data/vendor/tesseract-2.04/textord/pitsync1.cpp +425 -0
- data/vendor/tesseract-2.04/textord/pitsync1.h +135 -0
- data/vendor/tesseract-2.04/textord/scanedg.cpp +452 -0
- data/vendor/tesseract-2.04/textord/scanedg.h +74 -0
- data/vendor/tesseract-2.04/textord/sortflts.cpp +80 -0
- data/vendor/tesseract-2.04/textord/sortflts.h +64 -0
- data/vendor/tesseract-2.04/textord/tessout.h +76 -0
- data/vendor/tesseract-2.04/textord/topitch.cpp +2019 -0
- data/vendor/tesseract-2.04/textord/topitch.h +195 -0
- data/vendor/tesseract-2.04/textord/tordmain.cpp +907 -0
- data/vendor/tesseract-2.04/textord/tordmain.h +132 -0
- data/vendor/tesseract-2.04/textord/tospace.cpp +1939 -0
- data/vendor/tesseract-2.04/textord/tospace.h +193 -0
- data/vendor/tesseract-2.04/textord/tovars.cpp +87 -0
- data/vendor/tesseract-2.04/textord/tovars.h +94 -0
- data/vendor/tesseract-2.04/textord/underlin.cpp +312 -0
- data/vendor/tesseract-2.04/textord/underlin.h +53 -0
- data/vendor/tesseract-2.04/textord/wordseg.cpp +620 -0
- data/vendor/tesseract-2.04/textord/wordseg.h +70 -0
- data/vendor/tesseract-2.04/training/Makefile.am +54 -0
- data/vendor/tesseract-2.04/training/Makefile.in +720 -0
- data/vendor/tesseract-2.04/training/cnTraining.cpp +855 -0
- data/vendor/tesseract-2.04/training/cntraining.dsp +243 -0
- data/vendor/tesseract-2.04/training/cntraining.vcproj +950 -0
- data/vendor/tesseract-2.04/training/mergenf.cpp +451 -0
- data/vendor/tesseract-2.04/training/mergenf.h +106 -0
- data/vendor/tesseract-2.04/training/mfTraining.cpp +1341 -0
- data/vendor/tesseract-2.04/training/mftraining.dsp +285 -0
- data/vendor/tesseract-2.04/training/mftraining.vcproj +1055 -0
- data/vendor/tesseract-2.04/training/name2char.cpp +166 -0
- data/vendor/tesseract-2.04/training/name2char.h +38 -0
- data/vendor/tesseract-2.04/training/training.cpp +190 -0
- data/vendor/tesseract-2.04/training/training.h +130 -0
- data/vendor/tesseract-2.04/training/unicharset_extractor.cpp +140 -0
- data/vendor/tesseract-2.04/training/unicharset_extractor.dsp +335 -0
- data/vendor/tesseract-2.04/training/unicharset_extractor.vcproj +769 -0
- data/vendor/tesseract-2.04/training/wordlist2dawg.cpp +69 -0
- data/vendor/tesseract-2.04/training/wordlist2dawg.dsp +319 -0
- data/vendor/tesseract-2.04/training/wordlist2dawg.vcproj +1113 -0
- data/vendor/tesseract-2.04/viewer/Makefile.am +9 -0
- data/vendor/tesseract-2.04/viewer/Makefile.in +591 -0
- data/vendor/tesseract-2.04/viewer/scrollview.cpp +825 -0
- data/vendor/tesseract-2.04/viewer/scrollview.h +414 -0
- data/vendor/tesseract-2.04/viewer/svmnode.cpp +140 -0
- data/vendor/tesseract-2.04/viewer/svmnode.h +94 -0
- data/vendor/tesseract-2.04/viewer/svpaint.cpp +220 -0
- data/vendor/tesseract-2.04/viewer/svutil.cpp +347 -0
- data/vendor/tesseract-2.04/viewer/svutil.h +138 -0
- data/vendor/tesseract-2.04/wordrec/Makefile.am +23 -0
- data/vendor/tesseract-2.04/wordrec/Makefile.in +641 -0
- data/vendor/tesseract-2.04/wordrec/associate.cpp +62 -0
- data/vendor/tesseract-2.04/wordrec/associate.h +93 -0
- data/vendor/tesseract-2.04/wordrec/badwords.cpp +106 -0
- data/vendor/tesseract-2.04/wordrec/badwords.h +51 -0
- data/vendor/tesseract-2.04/wordrec/bestfirst.cpp +526 -0
- data/vendor/tesseract-2.04/wordrec/bestfirst.h +203 -0
- data/vendor/tesseract-2.04/wordrec/charsample.h +208 -0
- data/vendor/tesseract-2.04/wordrec/chop.cpp +458 -0
- data/vendor/tesseract-2.04/wordrec/chop.h +153 -0
- data/vendor/tesseract-2.04/wordrec/chopper.cpp +750 -0
- data/vendor/tesseract-2.04/wordrec/chopper.h +104 -0
- data/vendor/tesseract-2.04/wordrec/closed.cpp +136 -0
- data/vendor/tesseract-2.04/wordrec/closed.h +65 -0
- data/vendor/tesseract-2.04/wordrec/djmenus.cpp +118 -0
- data/vendor/tesseract-2.04/wordrec/djmenus.h +33 -0
- data/vendor/tesseract-2.04/wordrec/drawfx.cpp +92 -0
- data/vendor/tesseract-2.04/wordrec/drawfx.h +33 -0
- data/vendor/tesseract-2.04/wordrec/findseam.cpp +566 -0
- data/vendor/tesseract-2.04/wordrec/findseam.h +69 -0
- data/vendor/tesseract-2.04/wordrec/gradechop.cpp +226 -0
- data/vendor/tesseract-2.04/wordrec/gradechop.h +91 -0
- data/vendor/tesseract-2.04/wordrec/heuristic.cpp +194 -0
- data/vendor/tesseract-2.04/wordrec/heuristic.h +120 -0
- data/vendor/tesseract-2.04/wordrec/makechop.cpp +281 -0
- data/vendor/tesseract-2.04/wordrec/makechop.h +69 -0
- data/vendor/tesseract-2.04/wordrec/matchtab.cpp +191 -0
- data/vendor/tesseract-2.04/wordrec/matchtab.h +45 -0
- data/vendor/tesseract-2.04/wordrec/matrix.cpp +118 -0
- data/vendor/tesseract-2.04/wordrec/matrix.h +104 -0
- data/vendor/tesseract-2.04/wordrec/measure.h +135 -0
- data/vendor/tesseract-2.04/wordrec/metrics.cpp +363 -0
- data/vendor/tesseract-2.04/wordrec/metrics.h +130 -0
- data/vendor/tesseract-2.04/wordrec/mfvars.cpp +51 -0
- data/vendor/tesseract-2.04/wordrec/mfvars.h +27 -0
- data/vendor/tesseract-2.04/wordrec/msmenus.cpp +110 -0
- data/vendor/tesseract-2.04/wordrec/msmenus.h +45 -0
- data/vendor/tesseract-2.04/wordrec/olutil.cpp +153 -0
- data/vendor/tesseract-2.04/wordrec/olutil.h +128 -0
- data/vendor/tesseract-2.04/wordrec/outlines.cpp +172 -0
- data/vendor/tesseract-2.04/wordrec/outlines.h +148 -0
- data/vendor/tesseract-2.04/wordrec/pieces.cpp +410 -0
- data/vendor/tesseract-2.04/wordrec/pieces.h +154 -0
- data/vendor/tesseract-2.04/wordrec/plotedges.cpp +134 -0
- data/vendor/tesseract-2.04/wordrec/plotedges.h +71 -0
- data/vendor/tesseract-2.04/wordrec/plotseg.cpp +116 -0
- data/vendor/tesseract-2.04/wordrec/plotseg.h +73 -0
- data/vendor/tesseract-2.04/wordrec/render.cpp +152 -0
- data/vendor/tesseract-2.04/wordrec/render.h +58 -0
- data/vendor/tesseract-2.04/wordrec/seam.cpp +482 -0
- data/vendor/tesseract-2.04/wordrec/seam.h +136 -0
- data/vendor/tesseract-2.04/wordrec/split.cpp +182 -0
- data/vendor/tesseract-2.04/wordrec/split.h +115 -0
- data/vendor/tesseract-2.04/wordrec/tally.cpp +68 -0
- data/vendor/tesseract-2.04/wordrec/tally.h +94 -0
- data/vendor/tesseract-2.04/wordrec/tessinit.cpp +108 -0
- data/vendor/tesseract-2.04/wordrec/tessinit.h +46 -0
- data/vendor/tesseract-2.04/wordrec/tface.cpp +272 -0
- data/vendor/tesseract-2.04/wordrec/tface.h +35 -0
- data/vendor/tesseract-2.04/wordrec/wordclass.cpp +284 -0
- data/vendor/tesseract-2.04/wordrec/wordclass.h +64 -0
- metadata +708 -0
@@ -0,0 +1,723 @@
|
|
1
|
+
/**********************************************************************
|
2
|
+
* File: imgtiff.c (Formerly tiff.c)
|
3
|
+
* Description: Max format image reader/writer.
|
4
|
+
* Author: Ray Smith
|
5
|
+
* Created: Mon Jun 11 14:00:21 BST 1990
|
6
|
+
*
|
7
|
+
* (C) Copyright 1990, Hewlett-Packard Ltd.
|
8
|
+
** Licensed under the Apache License, Version 2.0 (the "License");
|
9
|
+
** you may not use this file except in compliance with the License.
|
10
|
+
** You may obtain a copy of the License at
|
11
|
+
** http://www.apache.org/licenses/LICENSE-2.0
|
12
|
+
** Unless required by applicable law or agreed to in writing, software
|
13
|
+
** distributed under the License is distributed on an "AS IS" BASIS,
|
14
|
+
** WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
|
15
|
+
** See the License for the specific language governing permissions and
|
16
|
+
** limitations under the License.
|
17
|
+
*
|
18
|
+
**********************************************************************/
|
19
|
+
|
20
|
+
#include "mfcpch.h" //precompiled headers
|
21
|
+
#ifdef __MSW32__
|
22
|
+
#include <io.h>
|
23
|
+
#else
|
24
|
+
#include <unistd.h>
|
25
|
+
#endif
|
26
|
+
|
27
|
+
/*
|
28
|
+
** Include automatically generated configuration file if running autoconf
|
29
|
+
*/
|
30
|
+
#ifdef HAVE_CONFIG_H
|
31
|
+
#include "config_auto.h"
|
32
|
+
#if defined(MOTOROLA_BYTE_ORDER) || defined(WORDS_BIGENDIAN)
|
33
|
+
#define __MOTO__ // Big-endian.
|
34
|
+
#endif
|
35
|
+
#endif
|
36
|
+
|
37
|
+
#include "fileerr.h"
|
38
|
+
#include "imgerrs.h"
|
39
|
+
#include "img.h"
|
40
|
+
#include "bitstrm.h"
|
41
|
+
#include "tprintf.h"
|
42
|
+
#include "serialis.h"
|
43
|
+
#include "imgtiff.h"
|
44
|
+
|
45
|
+
#define INTEL 0x4949
|
46
|
+
#define MOTO 0x4d4d
|
47
|
+
|
48
|
+
/*************************************************************************
|
49
|
+
* NOTE ON BIG-ENDIAN vs LITTLE-ENDIAN
|
50
|
+
*
|
51
|
+
* Intel machines store numbers with LSByte in the left position.
|
52
|
+
* Motorola (and PA_RISC) machines use the opposite byte ordering.
|
53
|
+
*
|
54
|
+
* This code is written so that:
|
55
|
+
* a) it will compile and run on EITHER machine type AND
|
56
|
+
* b) the program (on either machine) will process tiff file written in either
|
57
|
+
* Motorola or Intel format.
|
58
|
+
*
|
59
|
+
* The code is compiled with a __NATIVE__ define which is either MOTO or INTEL.
|
60
|
+
* MOTO and INTEL are defined (above) to be the value of the first two bytes of
|
61
|
+
* a tiff file in either format. (This identifies the filetype).
|
62
|
+
*
|
63
|
+
* Subsequent reads and writes normally just reverse the byte order if the
|
64
|
+
* machine type (__NATIVE__) is not equal to the filetype determined from the
|
65
|
+
* first two bytes of the tiff file.
|
66
|
+
*
|
67
|
+
* A special case is the "value" field of the tag structure. This can contain
|
68
|
+
* EITHER a 16bit or a 32bit value. According to the "type" field. The 4 cases
|
69
|
+
* of machine type / file type combinations need to be treated differently in
|
70
|
+
* the case of 16 bit values
|
71
|
+
*************************************************************************/
|
72
|
+
|
73
|
+
#define ENTRIES 19 /*no of entries */
|
74
|
+
#define START 8 /*start of tag table */
|
75
|
+
|
76
|
+
typedef struct
|
77
|
+
{
|
78
|
+
uinT16 tag; //entry tag
|
79
|
+
uinT16 type;
|
80
|
+
uinT32 length;
|
81
|
+
inT32 value;
|
82
|
+
} TIFFENTRY; //tiff tag entry
|
83
|
+
|
84
|
+
typedef struct myrational
|
85
|
+
{
|
86
|
+
inT32 top;
|
87
|
+
inT32 bottom;
|
88
|
+
} MYRATIONAL; //type 5
|
89
|
+
|
90
|
+
//statics for the run length codes
|
91
|
+
#define EOL_CODE 0x800
|
92
|
+
#define EOL_MASK 0xfff
|
93
|
+
#define EOL_LENGTH 12 //12 bits
|
94
|
+
#define SHORT_CODE_SIZE 64 //no of short codes
|
95
|
+
#define LONG_CODE_SIZE 40 //no of long codes
|
96
|
+
|
97
|
+
static uinT16 short_white_codes[SHORT_CODE_SIZE] = {
|
98
|
+
0xac, 0x38, 0xe, 0x1, 0xd, 0x3, 0x7, 0xf,
|
99
|
+
0x19, 0x5, 0x1c, 0x2, 0x4, 0x30, 0xb, 0x2b,
|
100
|
+
0x15, 0x35, 0x72, 0x18, 0x8, 0x74, 0x60, 0x10,
|
101
|
+
0xa, 0x6a, 0x64, 0x12, 0xc, 0x40, 0xc0, 0x58,
|
102
|
+
0xd8, 0x48, 0xc8, 0x28, 0xa8, 0x68, 0xe8, 0x14,
|
103
|
+
0x94, 0x54, 0xd4, 0x34, 0xb4, 0x20, 0xa0, 0x50,
|
104
|
+
0xd0, 0x4a, 0xca, 0x2a, 0xaa, 0x24, 0xa4, 0x1a,
|
105
|
+
0x9a, 0x5a, 0xda, 0x52, 0xd2, 0x4c, 0xcc, 0x2c
|
106
|
+
};
|
107
|
+
static uinT8 short_white_lengths[SHORT_CODE_SIZE] = {
|
108
|
+
8, 6, 4, 4, 4, 4, 4, 4,
|
109
|
+
5, 5, 5, 5, 6, 6, 6, 6,
|
110
|
+
6, 6, 7, 7, 7, 7, 7, 7,
|
111
|
+
7, 7, 7, 7, 7, 8, 8, 8,
|
112
|
+
8, 8, 8, 8, 8, 8, 8, 8,
|
113
|
+
8, 8, 8, 8, 8, 8, 8, 8,
|
114
|
+
8, 8, 8, 8, 8, 8, 8, 8,
|
115
|
+
8, 8, 8, 8, 8, 8, 8, 8
|
116
|
+
};
|
117
|
+
static uinT16 short_black_codes[SHORT_CODE_SIZE] = {
|
118
|
+
0x3b0, 0x2, 0x3, 0x1, 0x6, 0xc, 0x4, 0x18,
|
119
|
+
0x28, 0x8, 0x10, 0x50, 0x70, 0x20, 0xe0, 0x30,
|
120
|
+
0x3a0, 0x60, 0x40, 0x730, 0xb0, 0x1b0, 0x760, 0xa0,
|
121
|
+
0x740, 0xc0, 0x530, 0xd30,
|
122
|
+
0x330, 0xb30, 0x160, 0x960,
|
123
|
+
0x560, 0xd60, 0x4b0, 0xcb0,
|
124
|
+
0x2b0, 0xab0, 0x6b0, 0xeb0,
|
125
|
+
0x360, 0xb60, 0x5b0, 0xdb0,
|
126
|
+
0x2a0, 0xaa0, 0x6a0, 0xea0,
|
127
|
+
0x260, 0xa60, 0x4a0, 0xca0,
|
128
|
+
0x240, 0xec0, 0x1c0, 0xe40,
|
129
|
+
0x140, 0x1a0, 0x9a0, 0xd40,
|
130
|
+
0x340, 0x5a0, 0x660, 0xe60
|
131
|
+
};
|
132
|
+
static uinT8 short_black_lengths[SHORT_CODE_SIZE] = {
|
133
|
+
10, 3, 2, 2, 3, 4, 4, 5,
|
134
|
+
6, 6, 7, 7, 7, 8, 8, 9,
|
135
|
+
10, 10, 10, 11, 11, 11, 11, 11,
|
136
|
+
11, 11, 12, 12, 12, 12, 12, 12,
|
137
|
+
12, 12, 12, 12, 12, 12, 12, 12,
|
138
|
+
12, 12, 12, 12, 12, 12, 12, 12,
|
139
|
+
12, 12, 12, 12, 12, 12, 12, 12,
|
140
|
+
12, 12, 12, 12, 12, 12, 12, 12
|
141
|
+
};
|
142
|
+
static uinT16 long_white_codes[LONG_CODE_SIZE] = {
|
143
|
+
0x1b, 0x9, 0x3a, 0x76, 0x6c, 0xec, 0x26, 0xa6,
|
144
|
+
0x16, 0xe6, 0x66, 0x166, 0x96, 0x196, 0x56, 0x156,
|
145
|
+
0xd6, 0x1d6, 0x36, 0x136, 0xb6, 0x1b6, 0x32, 0x132,
|
146
|
+
0xb2, 0x6, 0x1b2,
|
147
|
+
0x80, 0x180, 0x580, 0x480, 0xc80,
|
148
|
+
0x280, 0xa80, 0x680, 0xe80, 0x380, 0xb80, 0x780, 0xf80
|
149
|
+
};
|
150
|
+
static uinT8 long_white_lengths[LONG_CODE_SIZE] = {
|
151
|
+
5, 5, 6, 7, 8, 8, 8, 8,
|
152
|
+
8, 8, 9, 9, 9, 9, 9, 9,
|
153
|
+
9, 9, 9, 9, 9, 9, 9, 9,
|
154
|
+
9, 6, 9, 11, 11, 11, 12, 12,
|
155
|
+
12, 12, 12, 12, 12, 12, 12, 12
|
156
|
+
};
|
157
|
+
static uinT16 long_black_codes[LONG_CODE_SIZE] = {
|
158
|
+
0x3c0, 0x130, 0x930, 0xda0,
|
159
|
+
0xcc0, 0x2c0, 0xac0, 0x6c0,
|
160
|
+
0x16c0, 0xa40, 0x1a40, 0x640,
|
161
|
+
0x1640, 0x9c0, 0x19c0, 0x5c0,
|
162
|
+
0x15c0, 0xdc0, 0x1dc0, 0x940,
|
163
|
+
0x1940, 0x540, 0x1540, 0xb40,
|
164
|
+
0x1b40, 0x4c0, 0x14c0,
|
165
|
+
0x80, 0x180, 0x580, 0x480, 0xc80,
|
166
|
+
0x280, 0xa80, 0x680, 0xe80, 0x380, 0xb80, 0x780, 0xf80
|
167
|
+
};
|
168
|
+
static uinT8 long_black_lengths[LONG_CODE_SIZE] = {
|
169
|
+
10, 12, 12, 12, 12, 12, 12, 13,
|
170
|
+
13, 13, 13, 13, 13, 13, 13, 13,
|
171
|
+
13, 13, 13, 13, 13, 13, 13, 13,
|
172
|
+
13, 13, 13, 11, 11, 11, 12, 12,
|
173
|
+
12, 12, 12, 12, 12, 12, 12, 12
|
174
|
+
};
|
175
|
+
|
176
|
+
/**********************************************************************
|
177
|
+
* open_tif_image
|
178
|
+
*
|
179
|
+
* Read the header of a tif format image and prepare to read the rest.
|
180
|
+
**********************************************************************/
|
181
|
+
|
182
|
+
inT8 open_tif_image( //read header
|
183
|
+
int fd, //file to read
|
184
|
+
inT32 *xsize, //size of image
|
185
|
+
inT32 *ysize,
|
186
|
+
inT8 *bpp, //bits per pixel
|
187
|
+
inT8 *photo, //interpretation
|
188
|
+
inT32 *res //resolution
|
189
|
+
) {
|
190
|
+
inT16 filetype;
|
191
|
+
inT32 start; //start of tiff directory
|
192
|
+
inT16 entries; //no of tiff entries
|
193
|
+
inT32 imagestart; //location of image in file
|
194
|
+
inT32 resoffset; //location of res
|
195
|
+
TIFFENTRY tiffentry; //tag table entry
|
196
|
+
BOOL8 compressed; //compression control
|
197
|
+
MYRATIONAL resinfo; //resolution
|
198
|
+
BOOL8 strips = false; //if in strips
|
199
|
+
|
200
|
+
*xsize = -1; //illegal values
|
201
|
+
*ysize = -1;
|
202
|
+
*bpp = -1;
|
203
|
+
*res = -1;
|
204
|
+
resoffset = -1;
|
205
|
+
if (read (fd, (char *) &filetype, sizeof filetype) != sizeof filetype
|
206
|
+
|| (filetype != INTEL && filetype != MOTO)) {
|
207
|
+
BADIMAGEFORMAT.error ("read_tif_image", TESSLOG, "Filetype");
|
208
|
+
return -1;
|
209
|
+
}
|
210
|
+
lseek (fd, 4L, 0);
|
211
|
+
if (read (fd, (char *) &start, sizeof start) != sizeof start) {
|
212
|
+
READFAILED.error ("read_tif_image", TESSLOG, "Start of tag table");
|
213
|
+
return -1;
|
214
|
+
}
|
215
|
+
|
216
|
+
if (filetype != __NATIVE__)
|
217
|
+
start = reverse32 (start);
|
218
|
+
if (start <= 0) {
|
219
|
+
BADIMAGEFORMAT.error ("read_tif_image", TESSLOG, "Start of tag table");
|
220
|
+
return -1;
|
221
|
+
}
|
222
|
+
lseek (fd, start, 0);
|
223
|
+
if (read (fd, (char *) &entries, sizeof (inT16)) != sizeof (inT16)) {
|
224
|
+
BADIMAGEFORMAT.error ("read_tif_image", TESSLOG, "Size of tag table");
|
225
|
+
return -1;
|
226
|
+
}
|
227
|
+
if (filetype != __NATIVE__)
|
228
|
+
entries = reverse16 (entries);
|
229
|
+
// printf("No of tiff directory entries=%d\n",entries);
|
230
|
+
imagestart = 0;
|
231
|
+
compressed = FALSE;
|
232
|
+
int samples_per_pixel = 1;
|
233
|
+
int bits_per_sample = 1;
|
234
|
+
for (; entries-- > 0;) {
|
235
|
+
if (read (fd, (char *) &tiffentry, sizeof tiffentry) !=
|
236
|
+
sizeof tiffentry) {
|
237
|
+
BADIMAGEFORMAT.error ("read_tif_image", TESSLOG, "Tag table entry");
|
238
|
+
return -1;
|
239
|
+
}
|
240
|
+
if (filetype != __NATIVE__) {
|
241
|
+
tiffentry.type = reverse16 (tiffentry.type);
|
242
|
+
tiffentry.tag = reverse16 (tiffentry.tag);
|
243
|
+
tiffentry.length = reverse32 (tiffentry.length);
|
244
|
+
}
|
245
|
+
if (tiffentry.type != 3) { //Full 32bit value
|
246
|
+
if (filetype != __NATIVE__)
|
247
|
+
tiffentry.value = reverse32 (tiffentry.value);
|
248
|
+
}
|
249
|
+
else {
|
250
|
+
/* A 16bit value in 4 bytes - handle with care. SEE NOTE at start of file */
|
251
|
+
if (__NATIVE__ == MOTO) {
|
252
|
+
if (filetype == MOTO) //MOTO file on MOTO Machine
|
253
|
+
tiffentry.value = tiffentry.value >> 16;
|
254
|
+
else //INTEL file on MOTO Machine
|
255
|
+
tiffentry.value = reverse32 (tiffentry.value);
|
256
|
+
}
|
257
|
+
else { //INTEL Machine
|
258
|
+
if (filetype == MOTO) //MOTO file on INTEL Machine
|
259
|
+
tiffentry.value = reverse16 ((uinT16) tiffentry.value);
|
260
|
+
//INTEL file on INTEL Machine NO ACTION NEEDED
|
261
|
+
}
|
262
|
+
//Clear top 2 MSBytes
|
263
|
+
tiffentry.value &= 0x0000ffff;
|
264
|
+
}
|
265
|
+
|
266
|
+
// printf("Tag=%x, Type=%x, Length=%x, value=%x\n",
|
267
|
+
// tiffentry.tag,tiffentry.type,tiffentry.length,tiffentry.value);
|
268
|
+
switch (tiffentry.tag) {
|
269
|
+
case 0x101:
|
270
|
+
*ysize = tiffentry.value;
|
271
|
+
break;
|
272
|
+
case 0x100:
|
273
|
+
*xsize = tiffentry.value;
|
274
|
+
break;
|
275
|
+
case 0x102:
|
276
|
+
if (tiffentry.length == 1)
|
277
|
+
bits_per_sample = (inT8) tiffentry.value;
|
278
|
+
else
|
279
|
+
bits_per_sample = 8;
|
280
|
+
break;
|
281
|
+
case 0x115:
|
282
|
+
samples_per_pixel = (inT8) tiffentry.value;
|
283
|
+
break;
|
284
|
+
case 0x111:
|
285
|
+
imagestart = tiffentry.value;
|
286
|
+
strips = tiffentry.length > 1;
|
287
|
+
break;
|
288
|
+
case 0x103:
|
289
|
+
if (tiffentry.value == 3) {
|
290
|
+
compressed = TRUE;
|
291
|
+
}
|
292
|
+
else if (tiffentry.value != 1) {
|
293
|
+
BADIMAGEFORMAT.error ("read_tif_image", TESSLOG, "Compression");
|
294
|
+
return -1;
|
295
|
+
}
|
296
|
+
break;
|
297
|
+
case 0x11a:
|
298
|
+
case 0x11b:
|
299
|
+
//resolution
|
300
|
+
resoffset = tiffentry.value;
|
301
|
+
break;
|
302
|
+
case 0x106:
|
303
|
+
*photo = (inT8) tiffentry.value;
|
304
|
+
break;
|
305
|
+
} //endswitch
|
306
|
+
}
|
307
|
+
if (*xsize <= 0 || *ysize <= 0 || imagestart <= 0) {
|
308
|
+
BADIMAGEFORMAT.error ("read_tif_image", TESSLOG, "Vital tag");
|
309
|
+
return -1;
|
310
|
+
}
|
311
|
+
tprintf("Image has %d * %d bit%c per pixel, and size (%d,%d)\n",
|
312
|
+
bits_per_sample, samples_per_pixel, bits_per_sample == 1 ? ' ' : 's',
|
313
|
+
*xsize, *ysize);
|
314
|
+
*bpp = bits_per_sample * samples_per_pixel;
|
315
|
+
if (resoffset >= 0) {
|
316
|
+
lseek (fd, resoffset, 0);
|
317
|
+
if (read (fd, (char *) &resinfo, sizeof (resinfo)) != sizeof (resinfo)) {
|
318
|
+
READFAILED.error ("read_tif_image", TESSLOG, "Resolution");
|
319
|
+
return -1;
|
320
|
+
}
|
321
|
+
if (filetype != __NATIVE__) {
|
322
|
+
resinfo.top = reverse32 (resinfo.top);
|
323
|
+
resinfo.bottom = reverse32 (resinfo.bottom);
|
324
|
+
}
|
325
|
+
*res = resinfo.top / resinfo.bottom;
|
326
|
+
tprintf ("Resolution=%d\n", *res);
|
327
|
+
}
|
328
|
+
lseek (fd, (long) imagestart, 0);
|
329
|
+
if (strips) {
|
330
|
+
if (read (fd, (char *) &imagestart, sizeof (imagestart)) !=
|
331
|
+
sizeof (imagestart)) {
|
332
|
+
READFAILED.error ("read_tif_image", TESSLOG, "Strip offset");
|
333
|
+
return -1;
|
334
|
+
}
|
335
|
+
if (filetype != __NATIVE__)
|
336
|
+
imagestart = reverse32 (imagestart);
|
337
|
+
//indirection
|
338
|
+
lseek (fd, (long) imagestart, 0);
|
339
|
+
}
|
340
|
+
return compressed ? -2 : 0;
|
341
|
+
}
|
342
|
+
|
343
|
+
|
344
|
+
/**********************************************************************
|
345
|
+
* read_tif_image
|
346
|
+
*
|
347
|
+
* Read a whole tif image into memory.
|
348
|
+
**********************************************************************/
|
349
|
+
|
350
|
+
inT8 read_tif_image( //read whole image
|
351
|
+
int fd, //file to read
|
352
|
+
uinT8 *pixels, //pixels of image
|
353
|
+
inT32 xsize, //size of image
|
354
|
+
inT32 ysize,
|
355
|
+
inT8 bpp, //bits per pixel
|
356
|
+
inT32 //bytes per line
|
357
|
+
) {
|
358
|
+
inT32 xindex; //indices in image
|
359
|
+
inT32 yindex;
|
360
|
+
inT32 length; //short length
|
361
|
+
inT32 biglength; //extender
|
362
|
+
uinT8 *lengths; //current lengths
|
363
|
+
uinT16 *codes; //current codes
|
364
|
+
uinT16 codeword; //current code word
|
365
|
+
IMAGELINE imageline; //current line
|
366
|
+
IMAGE image; //dummy image
|
367
|
+
R_BITSTREAM bits; //read bitstream
|
368
|
+
uinT8 colour; //current colour
|
369
|
+
|
370
|
+
image.capture (pixels, xsize, ysize, bpp);
|
371
|
+
codeword = bits.open (fd); //open bitstream
|
372
|
+
read_eol(&bits, codeword); //find end of line
|
373
|
+
for (yindex = ysize - 1; yindex >= 0; yindex--) {
|
374
|
+
imageline.init ();
|
375
|
+
colour = TRUE;
|
376
|
+
for (xindex = 0; xindex < xsize;) {
|
377
|
+
if (colour) {
|
378
|
+
lengths = long_white_lengths;
|
379
|
+
codes = long_white_codes;
|
380
|
+
}
|
381
|
+
else {
|
382
|
+
lengths = long_black_lengths;
|
383
|
+
codes = long_black_codes;
|
384
|
+
}
|
385
|
+
for (biglength = 0; biglength < LONG_CODE_SIZE
|
386
|
+
&& (codeword & bits.masks (*lengths))
|
387
|
+
!= *codes; codes++, lengths++, biglength++);
|
388
|
+
if (biglength < LONG_CODE_SIZE) {
|
389
|
+
codeword = bits.read_code (*lengths);
|
390
|
+
biglength++;
|
391
|
+
biglength *= SHORT_CODE_SIZE;
|
392
|
+
}
|
393
|
+
else
|
394
|
+
biglength = 0;
|
395
|
+
if (colour) {
|
396
|
+
lengths = short_white_lengths;
|
397
|
+
codes = short_white_codes;
|
398
|
+
}
|
399
|
+
else {
|
400
|
+
lengths = short_black_lengths;
|
401
|
+
codes = short_black_codes;
|
402
|
+
}
|
403
|
+
for (length = 0; length < SHORT_CODE_SIZE
|
404
|
+
&& (codeword & bits.masks (*lengths))
|
405
|
+
!= *codes; codes++, lengths++, length++);
|
406
|
+
if (length < SHORT_CODE_SIZE) {
|
407
|
+
codeword = bits.read_code (*lengths);
|
408
|
+
for (length += biglength; length > 0; length--, xindex++)
|
409
|
+
imageline.pixels[xindex] = colour;
|
410
|
+
colour = !colour;
|
411
|
+
}
|
412
|
+
else
|
413
|
+
break;
|
414
|
+
}
|
415
|
+
if (xindex < xsize) {
|
416
|
+
tprintf ("%d pixels short on line %d", xsize - xindex, yindex);
|
417
|
+
tprintf (", unknown code=%x\n", codeword);
|
418
|
+
}
|
419
|
+
xindex = read_eol (&bits, codeword);
|
420
|
+
if (xindex > 0)
|
421
|
+
tprintf ("Discarding %d bits on line %d\n", xindex, yindex);
|
422
|
+
image.put_line (0, yindex, xsize, &imageline, 0);
|
423
|
+
}
|
424
|
+
return 0;
|
425
|
+
}
|
426
|
+
|
427
|
+
|
428
|
+
/**********************************************************************
|
429
|
+
* read_eol
|
430
|
+
*
|
431
|
+
* Take bits out of the stream until and end-of-line code is hit.
|
432
|
+
**********************************************************************/
|
433
|
+
|
434
|
+
inT32 read_eol( //read end of line
|
435
|
+
R_BITSTREAM *bits, //bitstream to read
|
436
|
+
uinT16 &code //current code
|
437
|
+
) {
|
438
|
+
BOOL8 anyones; //any 1 bits skipped
|
439
|
+
inT32 bitcount; //total bits skipped
|
440
|
+
|
441
|
+
anyones = FALSE;
|
442
|
+
bitcount = 0;
|
443
|
+
while ((code & EOL_MASK) != EOL_CODE) {
|
444
|
+
if (code & 1)
|
445
|
+
anyones = TRUE; //discarded one bit
|
446
|
+
bitcount++; //total discarded bits
|
447
|
+
code = bits->read_code (1); //take single bits
|
448
|
+
}
|
449
|
+
//extract EOL code
|
450
|
+
code = bits->read_code (EOL_LENGTH);
|
451
|
+
|
452
|
+
if (!anyones)
|
453
|
+
bitcount = 0; //ignore filler bits
|
454
|
+
return bitcount;
|
455
|
+
}
|
456
|
+
|
457
|
+
|
458
|
+
/**********************************************************************
|
459
|
+
* write_moto_tif
|
460
|
+
*
|
461
|
+
* Write a whole tif format image and close the file.
|
462
|
+
**********************************************************************/
|
463
|
+
|
464
|
+
inT8 write_moto_tif( //write whole image
|
465
|
+
int fd, //file to write on
|
466
|
+
uinT8 *pixels, //image pixels
|
467
|
+
inT32 xsize, //size of image
|
468
|
+
inT32 ysize,
|
469
|
+
inT8 bpp, //bits per pixel
|
470
|
+
inT8 photo,
|
471
|
+
inT32 res //resolution
|
472
|
+
) {
|
473
|
+
return write_tif_image (fd, pixels, xsize, ysize, bpp, res, MOTO, photo);
|
474
|
+
//use moto format
|
475
|
+
}
|
476
|
+
|
477
|
+
|
478
|
+
/**********************************************************************
|
479
|
+
* write_intel_tif
|
480
|
+
*
|
481
|
+
* Write a whole tif format image and close the file.
|
482
|
+
**********************************************************************/
|
483
|
+
|
484
|
+
inT8 write_intel_tif( //write whole image
|
485
|
+
int fd, //file to write on
|
486
|
+
uinT8 *pixels, //image pixels
|
487
|
+
inT32 xsize, //size of image
|
488
|
+
inT32 ysize,
|
489
|
+
inT8 bpp, //bits per pixel
|
490
|
+
inT8 photo,
|
491
|
+
inT32 res //resolution
|
492
|
+
) {
|
493
|
+
return write_tif_image (fd, pixels, xsize, ysize, bpp, res, INTEL, photo);
|
494
|
+
//use intel format
|
495
|
+
}
|
496
|
+
|
497
|
+
|
498
|
+
/**********************************************************************
|
499
|
+
* write_inverse_tif
|
500
|
+
*
|
501
|
+
* Write a whole tif format image and close the file.
|
502
|
+
**********************************************************************/
|
503
|
+
|
504
|
+
inT8 write_inverse_tif( //write whole image
|
505
|
+
int fd, //file to write on
|
506
|
+
uinT8 *pixels, //image pixels
|
507
|
+
inT32 xsize, //size of image
|
508
|
+
inT32 ysize,
|
509
|
+
inT8 bpp, //bits per pixel
|
510
|
+
inT8 photo,
|
511
|
+
inT32 res //resolution
|
512
|
+
) {
|
513
|
+
return write_tif_image (fd, pixels, xsize, ysize, bpp, res, INTEL,
|
514
|
+
1 - photo);
|
515
|
+
//use intel format
|
516
|
+
}
|
517
|
+
|
518
|
+
|
519
|
+
/**********************************************************************
|
520
|
+
* write_tif_image
|
521
|
+
*
|
522
|
+
* Write a whole tif format image and close the file.
|
523
|
+
**********************************************************************/
|
524
|
+
|
525
|
+
inT8 write_tif_image( //write whole image
|
526
|
+
int fd, //file to write on
|
527
|
+
uinT8 *pixels, //image pixels
|
528
|
+
inT32 xsize, //size of image
|
529
|
+
inT32 ysize,
|
530
|
+
inT8 bpp, //bits per pixel
|
531
|
+
inT32 res, //resolution
|
532
|
+
inT16 type, //format type
|
533
|
+
inT16 photo //metric interp
|
534
|
+
) {
|
535
|
+
inT32 size; //line/image size
|
536
|
+
inT16 entries; //no of tiff entries
|
537
|
+
inT32 start; //start of tag table
|
538
|
+
inT32 zero = 0;
|
539
|
+
MYRATIONAL resolution; //resolution
|
540
|
+
TIFFENTRY entry; //current entry
|
541
|
+
|
542
|
+
static TIFFENTRY tags[ENTRIES] = {
|
543
|
+
{0xfe, 4, 1, 0},
|
544
|
+
{0x100, 3, 1, 0},
|
545
|
+
{0x101, 3, 1, 0},
|
546
|
+
{0x102, 3, 1, 0},
|
547
|
+
{0x103, 3, 1, 1},
|
548
|
+
{0x106, 3, 1, 1},
|
549
|
+
{ /*line art */
|
550
|
+
0x107, 3, 1, 1
|
551
|
+
},
|
552
|
+
{0x10a, 3, 1, 1},
|
553
|
+
{
|
554
|
+
0x111, 4, 1, START + ENTRIES * sizeof (TIFFENTRY)
|
555
|
+
+ sizeof (inT32) + sizeof (short) + sizeof (MYRATIONAL) * 2
|
556
|
+
}
|
557
|
+
,
|
558
|
+
{0x112, 3, 1, 1}
|
559
|
+
,
|
560
|
+
{0x115, 3, 1, 1}
|
561
|
+
,
|
562
|
+
{0x116, 4, 1, 0}
|
563
|
+
,
|
564
|
+
{0x117, 4, 1, 0}
|
565
|
+
,
|
566
|
+
{0x118, 3, 1, 0}
|
567
|
+
,
|
568
|
+
{0x119, 3, 1, 1}
|
569
|
+
,
|
570
|
+
{
|
571
|
+
0x11a, 5, 1, START + ENTRIES * sizeof (TIFFENTRY)
|
572
|
+
+ sizeof (inT32) + sizeof (short)
|
573
|
+
},
|
574
|
+
{
|
575
|
+
0x11b, 5, 1, START + ENTRIES * sizeof (TIFFENTRY)
|
576
|
+
+ sizeof (inT32) + sizeof (short) + sizeof (MYRATIONAL)
|
577
|
+
}
|
578
|
+
,
|
579
|
+
{0x11c, 3, 1, 1}
|
580
|
+
,
|
581
|
+
{0x128, 3, 1, 2}
|
582
|
+
};
|
583
|
+
|
584
|
+
resolution.top = res;
|
585
|
+
resolution.bottom = 1;
|
586
|
+
if (write (fd, (char *) &type, sizeof type) != sizeof type
|
587
|
+
|| (type != INTEL && type != MOTO)) {
|
588
|
+
WRITEFAILED.error ("write_tif_image", TESSLOG, "Filetype");
|
589
|
+
return -1;
|
590
|
+
}
|
591
|
+
start = START;
|
592
|
+
entries = 0x002a;
|
593
|
+
if (type != __NATIVE__)
|
594
|
+
entries = reverse16 (entries);
|
595
|
+
if (write (fd, (char *) &entries, sizeof entries) != sizeof entries) {
|
596
|
+
WRITEFAILED.error ("write_tif_image", TESSLOG, "Version");
|
597
|
+
return -1;
|
598
|
+
}
|
599
|
+
if (type != __NATIVE__)
|
600
|
+
start = reverse32 (start);
|
601
|
+
if (write (fd, (char *) &start, sizeof start) != sizeof start) {
|
602
|
+
WRITEFAILED.error ("write_tif_image", TESSLOG, "Start");
|
603
|
+
return -1;
|
604
|
+
}
|
605
|
+
lseek (fd, (long) START, 0);
|
606
|
+
entries = ENTRIES;
|
607
|
+
if (type != __NATIVE__)
|
608
|
+
entries = reverse16 (entries);
|
609
|
+
if (write (fd, (char *) &entries, sizeof entries) != sizeof entries) {
|
610
|
+
WRITEFAILED.error ("write_tif_image", TESSLOG, "Entries");
|
611
|
+
return -1;
|
612
|
+
}
|
613
|
+
//line length
|
614
|
+
size = COMPUTE_IMAGE_XDIM (xsize, bpp);
|
615
|
+
size *= ysize; //total image size
|
616
|
+
// if (photo==0)
|
617
|
+
// {
|
618
|
+
// tags[0].tag=0xfe;
|
619
|
+
// tags[0].type=4;
|
620
|
+
// tags[0].value=0;
|
621
|
+
// }
|
622
|
+
// else
|
623
|
+
// {
|
624
|
+
// tags[0].tag=0xff;
|
625
|
+
// tags[0].type=3;
|
626
|
+
// tags[0].value=1;
|
627
|
+
// }
|
628
|
+
tags[1].value = xsize;
|
629
|
+
tags[2].value = ysize;
|
630
|
+
if (bpp == 24) {
|
631
|
+
tags[3].value = 8;
|
632
|
+
tags[10].value = 3;
|
633
|
+
tags[5].value = 2;
|
634
|
+
}
|
635
|
+
else {
|
636
|
+
tags[3].value = bpp;
|
637
|
+
tags[5].value = photo;
|
638
|
+
}
|
639
|
+
tags[11].value = ysize;
|
640
|
+
tags[14].value = (1 << bpp) - 1;
|
641
|
+
tags[12].value = size;
|
642
|
+
for (entries = 0; entries < ENTRIES; entries++) {
|
643
|
+
entry = tags[entries]; //get an entry
|
644
|
+
/* NB Convert entry.value BEFORE converting entry.type!!! */
|
645
|
+
if (entry.type != 3) { //Full 32bit value
|
646
|
+
if (type != __NATIVE__)
|
647
|
+
entry.value = reverse32 (entry.value);
|
648
|
+
}
|
649
|
+
else {
|
650
|
+
/* A 16bit value in 4 bytes - handle with care. SEE NOTE at start of file */
|
651
|
+
entry.value &= 0x0000ffff; //Ensure top 2 MSBytes clear
|
652
|
+
if (__NATIVE__ == MOTO) {
|
653
|
+
if (type == MOTO) //MOTO file on MOTO Machine
|
654
|
+
entry.value = entry.value << 16;
|
655
|
+
else //INTEL file on MOTO Machine
|
656
|
+
entry.value = reverse32 (entry.value);
|
657
|
+
}
|
658
|
+
else { //INTEL Machine
|
659
|
+
if (type == MOTO) //MOTO file on INTEL Machine
|
660
|
+
entry.value = reverse16 ((uinT16) entry.value);
|
661
|
+
//INTEL file on INTEL Machine NO ACTION NEEDED
|
662
|
+
}
|
663
|
+
}
|
664
|
+
if (type != __NATIVE__) {
|
665
|
+
entry.tag = reverse16 (entry.tag);
|
666
|
+
entry.type = reverse16 (entry.type);
|
667
|
+
entry.length = reverse32 (entry.length);
|
668
|
+
}
|
669
|
+
if (write (fd, (char *) &entry, sizeof (TIFFENTRY)) !=
|
670
|
+
sizeof (TIFFENTRY)) {
|
671
|
+
WRITEFAILED.error ("write_tif_image", TESSLOG, "Tag Table");
|
672
|
+
return -1;
|
673
|
+
}
|
674
|
+
}
|
675
|
+
if (write (fd, (char *) &zero, sizeof zero) != sizeof zero) {
|
676
|
+
WRITEFAILED.error ("write_tif_image", TESSLOG, "Tag table Terminator");
|
677
|
+
return -1;
|
678
|
+
}
|
679
|
+
if (type != __NATIVE__) {
|
680
|
+
resolution.top = reverse32 (resolution.top);
|
681
|
+
resolution.bottom = reverse32 (resolution.bottom);
|
682
|
+
}
|
683
|
+
if (write (fd, (char *) &resolution, sizeof resolution) != sizeof resolution
|
684
|
+
|| write (fd, (char *) &resolution,
|
685
|
+
sizeof resolution) != sizeof resolution) {
|
686
|
+
WRITEFAILED.error ("write_tif_image", TESSLOG, "Resolution");
|
687
|
+
return -1;
|
688
|
+
}
|
689
|
+
if (write (fd, (char *) pixels, (size_t) size) != size) {
|
690
|
+
WRITEFAILED.error ("write_tif_image", TESSLOG, "Image");
|
691
|
+
return -1;
|
692
|
+
}
|
693
|
+
close(fd);
|
694
|
+
return 0;
|
695
|
+
}
|
696
|
+
|
697
|
+
|
698
|
+
/**********************************************************************
|
699
|
+
* reverse32
|
700
|
+
*
|
701
|
+
* Byte swap the 32 bit number between Motorola & Intel format.
|
702
|
+
**********************************************************************/
|
703
|
+
|
704
|
+
//inT32 reverse32( //reverse 32 bit int
|
705
|
+
//uinT32 value //value to reverse
|
706
|
+
//)
|
707
|
+
//{
|
708
|
+
// return (value>>24) | (value>>8) & 0xff00
|
709
|
+
// | (value<<8) & 0xff0000 | (value<<24);
|
710
|
+
//}
|
711
|
+
|
712
|
+
/**********************************************************************
|
713
|
+
* reverse16
|
714
|
+
*
|
715
|
+
* Byte swap the 16 bit number between Motorola & Intel format.
|
716
|
+
**********************************************************************/
|
717
|
+
|
718
|
+
//inT16 reverse16( //reverse 16 bit int
|
719
|
+
//uinT16 value //value to reverse
|
720
|
+
//)
|
721
|
+
//{
|
722
|
+
// return (value>>8) | (value<<8);
|
723
|
+
//}
|