  SANE-tutorial-JP
  ҁF David Mosberger <David.Mosberger@acm.org>

  |F  ǎ < kawagisi@yk.rim.or.jp >
  1 1999N713쐬

  ́̕AXLip API ̋Kił SANE ̎dg݁ApbP[W̎g
  AvO~O̊Tvɂĉ̂łB

  The SANE Scanner Interface

           David Mosberger
           David.Mosberger@acm.org

  ̋L Linux Journal Issue 47, March 1998 ɔ\̂łB

  Tv

       SANE  `Scanner Access Now Easy' ̗łB́Atb
       gxbhXLiArfIAX`JAt[Oo(
       Lv`)̂悤ȃX^[摜foCX摜
       oƂłėp̃C^tF[XłBSANE ̈Ӌ`́A
       X̃foCX̓Cɂɉ摜AvP[V
       悤ɂȂƂƂłBʂ̎_猩ƁA SANE
       ɏfoCXhCoxłƂ
       ƂłBfoCXhCoSANE ɏʂ̃AvP[
       Vg悤ɂȂ̂łB

  1.  ͂߂

       Linux ŉ摜XLƎvƂ͂܂񂩁H 
       ȂAԂXLihCopbP[W̑ɓf
       ܂BĂ鎞_ŁAȂƂ 14 
       Linux pXLihCopbP[W݂܂BX̃pbP
       [W͍ił͂̂́Aǂ̃hCopbP[Wǂ̃X
       LiɎg΂悢̂ȂƂ悭܂B܂
       ɁApbP[W̓R}hCEC^tF[XAʂ̂
       tcl/tk x[X̃OtBJEtgGhAɊ
       S̃OtBJEtgGĥƂ
       łBoGeB͐LɂƂ͌̂́Ȁ
       ͂Ȃ傫ȓɂ̎łB

       SANE ͂̃W}邽߂ɍ܂B{IȃA
       CfA͒PłB܂AėpIł悭o API(Application
       Programming Interface) ΁AXLihCoƗ
       AvP[V̂͗eՂłB]āAVXLi
       hCo̍҂́AhCop̃AvP[VƂS
       zȂĂ悢̂łBɃAvP[VEvO}
       ƂĂ SANE ͔ėpIȂ̂ŁA͐䂳ł낤fo
       CXƓƗăAvP[VƂoƂ_
       ̂łB

       10 ̈قȂfoCXT|[g邽߂ɁA5̃AvP[V
       ~Ƃ܂BÂAv[`ł́A5~10=50  50 
       vOȂ΂Ȃ܂BSANE ł 5+10=15  15
       ̃vOł悢̂łB SANE ̓[Uɂb
       g܂B[U͎łCɓAvP[V
       I鎩RA[UANZX\ȑSẲ摜
       捞݃foCX𐧌䂷邽߂Ɏgpł܂B܂ SANE ́A
       gp̓̃foCXɈтC^tF[XƗ^
  ̂łB

   SANE ̂悤ȔėpC^tF[X̍ŏ݂̎ł
  ܂B TWAIN, PINT, Linux hand-scanner ƂC^
  tF[XɂƂ邩܂BȂ̂́C
  ̌ÂC^tF[Xɂ́AAvP[VfoCX
  (܂͂̋t)C^tF[XsĂ邱ƂłBႦ
  ΁APINT ͖{ɂԂ񌴎nIȃJ[lx̃C^tF
  [XłA hand-scanner C^tF[X͕ǂnhX
  LiɌ肳Ă܂BΏƓI SANE ̓X^[摜
  ރfoCXT|[ĝɈʂɂ͏[łBSANE ɍł
  ߂̂́AԂ TWAIN łB

  SANE  TWAIN ̉C͋R̈vł͂ȂƂ͎łA
  ͕ʂ̘błB TWAIN  SANE ł͂ȂȗŔATWAIN A
  vP[VɑăhCo̒ɃfoCX𐧌䂷邽
  ̃OtBJE[UC^tF[XuƂłB
  XLi삵Ă}VƂ͕ʂ̃}VŃAvP[V
  ĂƂ Linux ܂̓lbg[Nɂ͓K
  ܂BSANE ͂ƑΏƓIɁAۂ̃hCoƂ𐧌
  AvP[V̌ȕv܂BہA݂
  SANE fBXgr[Vɂ̓lbg[NoRł̃XL
  T|[gĂ܂B

  2.  SANE g

       SANE gɂ͉L ftp fBNgŐVo[W
       fBXgr[V肵܂B
       <ftp://ftp.mostang.com/pub/sane/>

       SANE ɕtĂOtBJE[UC^tF[Xrh
       ȂA GIMP 邢͍Œł GTK ArhAC
       Xg[Kv܂B GIMP  GTK ͂
       <ftp://ftp.gimp.org/>
       肵܂BGTK ͌X GIMP pɊJꂽ[UC^
       tF[X̃c[LbgłAł SANE ܂ޑ̑̃v
       WFNgɍ̗pĂ܂B SANE fBXgr[V
       GIMP/GTK CuĂ܂rhł܂BA
       ̏ꍇOtBJE[UC^tF[XEvO͉
       ƂrhꂸÅy݂DĂ܂܂B]ăT
       [op݂̂ SANE rĥłȂ΁AŒł GTK
       (GIMPł͂Ȃ) CXg[邱Ƃ߂܂B

       SANE fBXgr[V肵爳kĂ tar
       t@CWJA README t@C̓eɏ]ĉ
       BREADME  SANE rhACXg[@
       Ă܂B܂ PROBLEMS Ƃt@CɂڂʂĉB
       ɂ͊m̖_ƁAׂƂ̃Xg܂B

       SANE 𓮍삳邽߂ɃXLiJK{ł͂ȂƂ
       ӂĉB SANE fBXgr[Vɂ́APNM
       (portable `anymap')t@CǂނƂɂXLiV~
       [g鉼zhCoĂ܂B܂ASANE  Linux 
       肳܂BLinux Alpha, Linux x86, Linux m68k ȊOɂ
       AIX, Digital Unix, FreeBSD, HP-UX, IRIX, NetBSD, SCO,
       Solaris, SunOS ܂ OS/2 ł삵܂B

       SANE CXg[牺L̃R}h͂Ă݂܂
       B

       scanimage --list-devices

  ƈȉ̂悤ɏo͂锤łB

  device `mustek:/dev/scanner' is a Mustek MFC-06000CZ flatbed
  scanner
  device `pnm:0' is a Noname PNM file reader virtual device
  device `pnm:1' is a Noname PNM file reader virtual device

  ̗ł Mustek ̃XLi mustek:/dev/scanner Ƃ
  Oŗp\łA܂ pnm:0  pnm:1 Ƃ PNM t@C
  ǂނ߂Ɏg 2 ̉zfoCXpł邱ƂA
  Xg͕\Ă܂Bʂ̃foCX̑SẴIvV\
  ɂ́AႦ pnm:0 ̏ꍇÂ悤ɂ܂B

  scanimage --device pnm:0 --help

  Ɛ}1 ̂悤ȃwvbZ[Wo܂B

  ____________________________________________________________
      Usage: scanimage [OPTION]...

      Start image acquisition on a scanner device and write PNM image data to
      standard output.

      -d, --device-name=DEVICE   use a given scanner device
      -h, --help                 display this help message and exit
      -L, --list-devices         show available scanner devices
      -v, --verbose              give even more status messages
      -V, --version              print version information

      Options specific to device `pnm':
        Source Selection:
          --filename <\<>string> [/tmp/input.ppm]
              The filename of the image to be loaded.
        Image Enhancement:
          --brightness -100...100% [0]
              Controls the brightness of the acquired image.
          --contrast -100...100% [0]
              Controls the contrast of the acquired image.
          --grayify[=(yes|no)] [no]
              Load the image as grayscale.
          --three-pass[=(yes|no)] [no]
              Simulate a three-pass scanner by returning 3 separate frames.
              For kicks, it returns green, then blue, then red.
          --hand-scanner[=(yes|no)] [no]
              Simulate a hand-scanner.  Hand-scanners often do not know the
              image height a priori.  Instead, they return a height of -1.
              Setting this option allows one to test whether a front end can
              handle this correctly.
          --default-enhancements
              Set default values for enhancement controls
              (brightness & contrast).

              Figure 1: Scanimage Help Message For pnm:0 Pseudo-Device
              }1: pnm:0 zfoCXp scanimage ̃wvbZ[W
  ____________________________________________________________

  SANE pbP[Wɂ́AScanimage vO̎g
  ڍׂȃ}jAy[WtĂ܂BƂ input.ppm 
  O PPM t@Cz肵܂BL̃R}hŁA
  摜uXLvA邳 50%邱Ƃł
  B

  scanimage --device pnm --brightness 50 input.ppm >
  output.ppm
  xv ̂悤ȉ摜r[ output.ppm t@C
  ƁAoutput.ppm 邭ȂĂ邱Ƃł
  B

  Ȃ͂܂ | uBǃOtBJ
  E[UC^tF[X͂Ȃ́HvBSANE rh_
   GTK CuCXg[ς݂ł΁Axscanimage Ƃ
  vOĂяoƂł܂B́Ap\ȃfo
  CXꗗ̃_CAO{bNX\܂B`pnm:0' _uN
  bNƐ} 2 Ɏ_CAO\܂B

  <<  }2F SANE _CAOEBhE >>

  (  <http://www.mostang.com/sane/lj98/doc003.html>  Figure
  2: SANE Dialog Window Q )

  ̂悤Ƀ_CAOɂ 2  `Filename' ƂeLXg
  ̓{bNX `Brightness' ƂXC_܂Bŏ
  eLXg̓{bNX output.ppm , 2 ڂ̃{bNX
  input.ppm Ɠ͂ABrightness ̃XC_ 50.0 Ɉړ
  Ă獶 Scan {^ƁAOq̃R}hCŎs
   scanimage Ɠʂ܂B{Ԃ̃XL
  OɁAE Preview {^ăvr[EEB
  hE(}3) \邱Ƃł܂B

  <<  }3F SANE vr[EEBhE >>

  (  <http://www.mostang.com/sane/lj98/doc003.html>  Figure
  3: SANE Preview Window Q )

  vr[EEBhEł́A Acquire -> Preview {^
  ƃXL{Ԃ̉摜𑜓xŃvr[\ł܂BႦ
  ΁ABrightness XC_𑀍삷ƁA摜̖邳ǂ̂悤
  ɉe邩܂BXC_𓮂Ă Acquire
  Preview {^ƃvr[\XV܂B

  XLiJŉ摜XLہAlXȕ@̉摜␳
  Ƃ悭܂(ႦΉ摜V[vɂ
  )Bxscanimage vO͍Kɂ GIMP ̊gƂĎs
  邱Ƃł܂B̂悤ɂɂ́AGIMP  plug-ins
  fBNg xscanimage ̃oCiɃV{bNN
  邾łBSANE CXg[fBNgftH
  gƓƂƁAL̃R}hŃV{bNN𒣂
  ܂B

  ln -s /usr/local/bin/xscanimage ~/.gimp/plug-ins

  V{bNN𒣂ƁA GIMP ̎N
  xscanimage  `Xtns' (g) j[ɑgݍ܂܂B
  `Xtns -> Acquire' ĂɂȂ܂B̕@ŋN
  AScan {^ĐVXL摜(fBXNɃZ
  [u邩) GIMP EBhE̓ɒu܂B
  ŁAʏ GIMP ̉摜@\A荞񂾉摜Z[u
  O̕␳Ɏg悤ɂȂ܂B

   PNM zfoCX͂ƕςɌ邩܂񂪁A
  {̃XLiC^[tF[X͂ǂ̂悤Ɍ̂ł傤
  H} 4 ́AMustek tbgxbhEXLił xscanimage
  _CAOłB̐}́Axscanimage ̑̋@\Fc[`b
  v(o[wvƂ)̃fXg[VsĂ
  Bc[`bv΁AVK[UXLiJ̔\
  𗝉₷Ȃ܂B}̒ŁA}EX Scan Source 
  j[wǍʂ̃j[̃wv񂪃}EX|C
  ^̉̉F̒ɕ\Ă܂Bc[`bv͐VK
  [Uɂ͕֗łA΂炭ƎȂ̕@ł肽
  ܂B xscanimage ͏㋉Ҍ Preferences Tu
  j[Ńc[`bvoȂ悤ɂ邱Ƃł܂B

  << }4Fxscanimage ł Mustek _CAOEBhE >>

  (  <http://www.mostang.com/sane/lj98/doc003.html>  Figure
  4: Mustek Dialog Window for xscanimage Q )

  ̂悤 Mustek _CAO PNM zfoCXC^tF
  [XƂ͂ȂقȂ悤Ɍ܂B͌ɂȂfoCX
  قȂ\͂Ă邩łBfoCX_CAÓAI
  ꂽfoCXɈˑ邾łȂAfoCX̃[hɂˑ
  ܂BႦ΃_CAỎ̕ɂ `Use custom gamma
  table' IvVIɂƃC^tF[XύXA
  ʂƂĐ} 5 ̂悤ɂȂ܂B̂悤Ƀ_CAỎE
  ̓OtGfB^ɂȂAPx RGB ̃K}e[uύX
  ł܂B xscanimage ̓ANeBuȁA܂͗^
  ꂽXL[hł̏dvȃIvV𐳊mɕ\
  ŁA[UɂȂ܂B

  << }5FK}e[uGfB^t Mustek _CAO >>

  (  <http://www.mostang.com/sane/lj98/doc003.html>  Figure
  5: Mustek Dialog With Gamma Table Editor Q )

  }̉Eɂ摜̋PxK}e[uƁAxscanimage
  NxɃK}e[u`ĂAނ낢炢
  ̂ł͂ȂƎv܂BzIȃe[u
  āAZ[u邱ƂłȂf炵ł
  ˁB̂߂ɁAxscanimage  Preferences Tuj[̍
  Ō݂̃foCXݒZ[uł܂BZ[uĂ
  xscanimage NxɁÃfoCXōŌɃZ[uꂽ
  IvVIɓǂݍ܂܂B

  3.  SANE ɕt

       SANE fBXgr[VɊ܂܂邢̃vO
       gĂ܂B̑ɉ̂܂B
       Ă鎞_ŁApbP[Wɂ͈ȉ̃foCXp̃hCo
       Ă܂B

       o  Connectix QuickCam (J[ƃmN)

       o  Epson SCSI XLi

       o  Hewlett-Packard ScanJet SCSI XLi

       o  Microtek SCSI XLi

       o  Mustek SCSI tbgxbhXLi
          (1 pX 3 pXXLi ̂T|[gĂ
          )

       o  PINT foCX
          PINT  NetBSD, OpenBSD, SunOS p Unix J[lC^
          tF[XłB SANE  PINT hCo PINT T|[g
          XLiɃANZXł܂B

       o  قƂǂ UMAX SCSI XLi

          ̑̃XLiAJ̃T|[g͌v撆ŁA̓
          ͂̋Lǂނ܂ł̊ԂɏoĂ邩܂
          BŐV͎Ql̂ƂɏĂEFuy[W
          ĉB

       p\ȃAvP[V́AR}hC scanimage 
       OtBJ xscanimage (X^hAŁA܂ GIMP 
       gƂ) (Connectix QuickCam ̂悤)A摜̃X
       g[JɓKOtBJ[UC^tF[X
        xcam łB

       āASANE ɂ Python  Java p API A܂[
       gfoCXւ̃lbg[NoR̃ANZX\ɂ saned
       Ƃlbg[Nf[܂B̓p[~bV
       K؂ɐݒ肵Ă΁AAJœ삵ĂJ[b
       pɂ}V琧䂷邱Ƃł܂B͑S SANE 
       C^[lbg̃T[rXɂ̂łB

  4.  ǂ̂悤ɓ삷邩

       SANE AvP[VrhہAlibsane.so ƂL
       CuNĂKv܂Bۂɂ́Alib-
       sane.so  SANE hCoQ̈ւ̃V{bNNɉ߂
       ܂Bǂ SANE hCoC^tF[X񋟂
       ŁAł libsane.so ւ̃V{bNNύXł܂
       AAvP[VgpĂhCoʓIɕύXł
       ܂BSẴAvP[VNƂȂhCo
       AbvO[hł邽߁AӖ͕֗łAXL
       foCXؑւ̓V{bNNύXȂ΂
       炸AȂsւłB̂ SANE ́Adll  net Ƃ
        2 ̉zfoCXhCoT|[gĂ܂B
       zhCoł | ȂȂ畨IfoCXɘb̂ł
       ȂA} 6 Ɏ悤ɑ SANE hCoƘbłB

  << } 6: 肤 SANE Kw >>

  (  <http://www.mostang.com/sane/lj98/doc005.html>  Figure
  6: Possible SANE Hierarchy Q )

  }V A ɂƂāAlibsane.so ̃V{bNN dll 
  zhCo (libsane-dll.so ƌĂ΂)wĂ܂Bzh
  Co͑ SANE hCoɃANZX邽߂Ƀ_Ci~bN
  NCu(dll)gp܂BᎦ}ł dll  pnm,
  mustek, net hCog߂ɐݒ肳Ă܂B

  net hCo͂艼zhCoŁA̓}V B œ삵
  Ă SANE f[(saned)ɐڑ邱ƂɂA[gX
  Liւ̃ANZX񋟂܂BāA}V B ́Â
  ̃hCoɃANZX邽߂ɍĂ dll gp܂B
  ẑ悤ɁAVXeǗ҂́A}V A  B 𐳂ݒ肵
  ȂƂ܂B

  libsane.so  dll zhCoւ̃V{bNNƂ
  ́AʂɍsłBł net zhCoւ̃
  NɂAP mustek hCoւ̃Nɂł
  R͂Ȃ͂łBAႦ mustek ɃN
  ꍇɂ́AAvP[V mustek ̃hCoɂANZX
  łȂȂł傤BłÅ͓ɂĂ͊S
  Ił邩܂B

  ̃Av[`͑Ϗ_łA[₪oĂ܂B
  ̂悤ȊŃfoCX̖OǂĂ̂ł傤H
  ́AAhCo͑SĂꎩg̖ÕXy[XĂ
  AłBႦ΁AMustek  HP hCo̓foCX𐧌䂷
  /dev/scanner ̂悤 Unix XyVfoCX̃pXg
  B

  zhCoɂ́AʔƂ܂B dll ͊eh
  Coj[Nł邱Ƃۏ؂Ȃ΂ȂȂ̂ŁAe
  X̏]foCXƏ]hCoRŋ؂̂
  ƂĂ܂B]āA}V A ł mustek ̃XLi
   mustek:/dev/scanner ƌĂ΂܂Bnet zhCol
  ɁA[gfoCXƃ[gzXgړƂĂ
  i͂RZp[^ƂĎg܂jB

  Ⴆ΁A}V B  HP XLi1
  ́Anet:B.domain.com:hp:/dev/scanner1 ƂOŃ}V A
  Ɍ܂BOłAOɊ܂܂͎ۂ
  ɂ߂ėLpłB

  foCX SANE ̊KwʂČX̃foCX֊U
   ({Iɂ́AUnix ̃pXɎĂ܂)BႦ΁A}V B
  _EƂ΁A
  net:B.domain.com:hp:/dev/scanner1 悤Ƀ_EĂ
  Ƃ́AłB

  ̖OȂA[U܂̓VXeǗ҂AA
  vP[VȌȃGCAXŒ`邱Ƃł܂B
  ΁A[UAvP[VŏLfoCX(S҂ɂ
  Ղ) `HP Scanner 1' Ƀl[ł܂B

  5.  SANE ̃vO~O

       `ɂASANE ͂gvOƓ炢ǂB
       ̂̂łB́ASANE gpAvP[VfoC
       XAyȂ邱ƂӖ܂BSANE fBXg
       r[Vɂ́ASANE API ڍׂȃhLgt
       Ă܂AC^tF[X͋ɂ߂ăVvłBLɎ
       6̃C֐܂B

       handle <- sane_open (device-name):

       SANE foCX𖼑O (Ⴆ pnm:0)ŃI[v܂B

  sane_close (handle):

       SANE foCXN[Y܂B

  sane_get_option_descriptor (handle, option-number):

       foCXp\Ȑ͂Ȃɂ₢킹邽߂Ɏg
        (PNM zfoCXhCo̖邳̂悤)B

  sane_control_option (handle, option-number, action, value):

       IvV̒l擾܂͐ݒ肷邽߂Ɏg܂BႦ΁A
       邳̃IvV̒l 50% ɃZbg邽߂Ɏg܂B
       āA̃IvV̓hCoK؂ȒlƂ悤
       鎩[hT|[gĂ܂B̂悤ȃIvV
       ́Asane_control_option() ͎[hI܂̓Itɂ
       ߂ɂg܂B

  sane_start (handle):

       摜̎荞݂Jn邽߂Ɏg܂B

  bytes-read <- sane_read (handle, buffer, buffer-size):

       SẲ摜荞ނ܂ŁAۂ̉摜f[^ǂނ߂Ɏg
       ܂B

  SANE API ̓Vvɐ݌vĂ܂BڕẂAꂽhCoƃA
  vP[V\ɂ[ȋ@\񋟂ȂAVvȃ^XN
  ȂԂŐ邱ƂłBHP XLip hpscanpbm vO
   SANE hCoɕϊ̂ɗv̂͂ӂӂƂ́A݌ṽV
  v̍ŗǂ̏؋łBtɁAMustek hCo xscanimage ͂Ȃ
  ȃvOłASANE ͂ɏ̂ɖ͂܂B

  6.  SANE Əp̃AvP[V^hCo

       p SANE hCo܂̓AvP[VɊւ鎄̌
       ͉ł傤H GNU Public License ̐_ɂ΁ASANE v
       Õ\[XƂ͍D܂ƂłBA_Ci
       ~bN[hALinux Ƒ̃vbgz[p̃_Ci~b
       N[fBOT|[g鏤p SANE hCoƂ͋
       ܂ (hCo͏Ƀ_Ci~bN[ĥŁA
       ʂȍƂ𐶂܂)BRŁALCu
  libsane.so ɃN鏤pAvP[V̂
  ƂłB̌x{Iȍl͈ȉ̒ʂłB

  1. pƃt[vǑSȋ͍Yłĕł
  ȂB

  2. 蕝L SANE gp΁ALinux/Unix R~jeB
  ƂĂɂ悢󋵂ɂȂB

  7.  ̌v

       ߂̌v́AƑ̃foCX̃T|[gǉ
       邱ƂłBႦ΁AAgfa  Plustek ̃XLiANikon tB
       XLĩhCov悳Ă܂B܂A|s[
       ȃfW^J̃hCoԂȂ\
       Blbg[N̐ڑōŗǂ̂̂𓾂邽߂ɁAJava ̎
       s\ȃEFuuEUXLi𐧌ł Java ̃X
       LiAvP[Vv܂B

       vł́AI[fBI\[XrfIe[vR[_܂ޑ
       ̃}`fBAEfoCXSANE ܂̂ʉ邱
       Ƃɋł傤B

       ΁ASANE ͎n܂΂łBđ̂킭
       悤ȃvWFNg܂BȂӖŁA
       ̂ǂꂩɎQ邱ƂɋȂ SANE [O
       Xgʂđ̊J҂ƕʂĉB[OXg
       ̉l郊\[X SANE ̃z[y[Wɂ܂B

       <http://www.mostang.com/sane/>

  8.  ӎ

       SANE vWFNǵA̐lB̌pIȃT|[gɂ
       ĂȂł傤BłAAndreas Beck, Gordon
       Matzigkeit, Patrick Reynolds, Tristan Tarrant ɂv
       ́ASANE 𖲂猻̂̂ɕϊ邽߂ɌIłB

       l Michael K. Johnson  Jeremy Rosenberger A̋L
       ̏̃htgo[W̃tB[hobNꂽƂɂ
       ӂ܂B

  9.  {łɂ

       ̕ Linux Journal Issue 47, March 1998 Ɍfڂ
       ASANE ̃z[y[W  <http://www.mostang.com/sane/> 
       "Tutorial" ƂČJĂ镶|󂵂̂łB|
       ьJ邱ƂɊւ SANE vWFNg̗𓾂܂B

         F P 1999N713

       ŌF IWi̕ƓlɁA̓{ł GPL(GNU
       General Public License)ɏ]܂B

         F{ō쐬ɂAȉJF o[̕Ɍ䋦
       ܂BL܂B

   C < fuku@amorph.rim.or.jp >
   L < takei@cc.kochi-u.ac.jp >
   Y < nakano@apm.seikei.ac.jp >
  Hiro Sugawara  < hiro@arkusa.com >

  AF {ł̌󓙂̎wEAAǂɊւāAӌ
  qD < kawagisi@yk.rim.or.jp > ܂ JF vWFNg
  <JF@linux.or.jp> ɂ肢܂B

