[sane-devel] Setting Options Via sane_control_option(...)
Olaf Meeuwissen
olaf.meeuwissen at avasys.jp
Fri Jun 26 00:27:20 UTC 2015
Leon Hauck writes:
> I'm writing a custom frontend for a scanning project in C++ and am about
> 80% complete. I've been able to get this far by reviewing the scanimage
> and test code included in the source and whatever examples I found on
> the web. Hopefully someone can nudge me in the right direction.
Have a look at the SANE API specification as well. It's at
http://www.sane-project.org/html/
> Sane, scanimage, and xsane are configured and running properly on my
> test system (using an Epson Perfection 636 and a Canon LIDE220).
Can your custom project assume that only these scanner will ever be
used? If yes, you can get away with much more hard-coding than you
would be able to do with a more generic SANE frontend.
> In my frontend I've got the device selected and opened and can make
> repeated scans, however the images I'm saving (in PNM format) aren't
> what I'm expecting. I'm pretty sure it's due to not setting some of the
> options properly prior to the scan.
You also want to check the SANE_Parameters you get back from
sane_get_parameters() *after* you have called sane_start().
> So my question is - what settings to I need to set to prior to doing a
> scan to:
The answer to which is "It depends". The SANE API does not require
backends to provide any particular settings in any particular way.
A backend is even at liberty to provide different lists of settings for
different scanners.
> - set the mode (color or gray)
> - set the bit depth of the scan (to largest supported by scanner)
> - set the scan area
> (all scans for this application are going to be
> for a fixed area)
>
> Are there some straight forward examples on how to set these options?
> I've looked through the scanimage.c code and can't track down exactly
> where it handles the "--mode Color" command line option.
The scanimage program doesn't handle the --mode option. It is provided
by the backend for the scanner that you selected. Run `scanimage -h`
without scanners attached to get the list of options that are provided
by scanimage itself.
> The code I'm (unsuccessfully) using now to (attempt to) set these during
> program startup is below:
>
>
> // ----------------------------------------------------------
> // taken from epson sane driver
> #define OPT_RESOLUTION 10
> #define OPT_TL_X 25
> #define OPT_TL_Y 26
> #define OPT_BR_X 27
> #define OPT_BR_Y 28
> #define OPT_MODE 2
> #define OPT_BIT_DEPTH 3
You are aware of the fact that these values differ between backends,
right? You should use sane_get_option_descriptor() and iterate over the
options are see if any corresponds to one of the well-known options for
resolution
tl-x
tl-y
br-x
br-y
There are no well-known options for mode and (bit-)depth, bummer.
See http://www.sane-project.org/html/doc014.html for a list
Once you've found the options of interest, you can set values of the
correct type and that satisfy the option's constraint (if any).
> // set photo option
> SANE_Int saneIntVal;
>
> saneIntVal = 300;
> sane_control_option( sHand , OPT_RESOLUTION ,
> SANE_ACTION_SET_VALUE , &saneIntVal , &sane_info );
>
> saneIntVal = 8;
> sane_control_option( sHand , OPT_BIT_DEPTH ,
> SANE_ACTION_SET_VALUE , &saneIntVal , &sane_info );
>
> saneIntVal = 1;
> sane_control_option( sHand , OPT_MODE ,
> SANE_ACTION_SET_VALUE , &saneIntVal , &sane_info );
The epson backend expects a string for its mode setting.
> saneIntVal = 0;
> sane_control_option( sHand , OPT_TL_X ,
> SANE_ACTION_SET_VALUE , &saneIntVal , &sane_info );
>
> saneIntVal = 0;
> sane_control_option( sHand , OPT_TL_Y ,
> SANE_ACTION_SET_VALUE , &saneIntVal , &sane_info );
>
> saneIntVal = 200;
> sane_control_option( sHand , OPT_BR_X ,
> SANE_ACTION_SET_VALUE , & saneIntVal , &sane_info );
>
> saneIntVal = 200;
> sane_control_option( sHand , OPT_BR_Y ,
> SANE_ACTION_SET_VALUE , &saneIntVal , &sane_info );
>
>
> // ----------------------------------------------------------
>
>
> Thanks in advance - any help would be appreciated.
Hope this helps,
--
Olaf Meeuwissen, LPIC-2 FLOSS Engineer -- AVASYS CORPORATION
FSF Associate Member #1962 Help support software freedom
http://www.fsf.org/jf?referrer=1962
More information about the sane-devel
mailing list