Issues to set TwainCapabilities

Discussions about TWAIN & WIA scanning in GdPicture.NET using GdPictureImaging.
Post Reply
mickaelv
Posts: 2
Joined: Wed Feb 22, 2012 11:31 am

Issues to set TwainCapabilities

Post by mickaelv » Wed Feb 22, 2012 12:02 pm

Hi,

We're considering the use of your toolkit (latest version) in our solutions, but we're encountering an issue with the ability to set the twain capabilities.
From what we understood, some of them have some high level methods (like Brightness) but for others like the blank image detection, we are not sure we know how to proceed.

We should use the function TwainSetCapCurrentNumeric() or TwainSetCapCurrentString(), but when we try to get the available values, there seems to be a lot missing.

Here is our (quick) code to check the values of all capabilities :

Code: Select all

String sz = "";
using (StreamWriter myWrite = new StreamWriter(@"c:\twain.txt"))
            {
                foreach (TwainCapabilities myCap in Enum.GetValues(typeof(TwainCapabilities)))
                {
                    int iCount = oGdPictureImaging.TwainGetAvailableCapValuesCount(myCap);

                    TwainItemTypes myType = oGdPictureImaging.TwainGetCapItemType(myCap);

                    switch (myType)
                    {
                        case TwainItemTypes.TWTY_STR32:
                        case TwainItemTypes.TWTY_STR64:
                        case TwainItemTypes.TWTY_STR128:
                        case TwainItemTypes.TWTY_STR255:

                            for (int i = 0; i < iCount; i++)
                            {
                                sz = oGdPictureImaging.TwainGetAvailableCapValueNoString(myCap, i).ToString();
                                myWrite.WriteLine(myCap.ToString() + " - " + sz);
                            }

                            break;

                        default:

                            for (int i = 0; i < iCount; i++)
                            {
                                sz = oGdPictureImaging.TwainGetAvailableCapValueNoNumeric(myCap, i).ToString();
                                myWrite.WriteLine(myCap.ToString() + " - " + sz);
                            }

                            break;
                    }
                }
            }
And here is the result in the txt file :

Code: Select all

CAP_XFERCOUNT - 0
ICAP_COMPRESSION - 0
ICAP_COMPRESSION - 0
ICAP_PIXELTYPE - 0
ICAP_PIXELTYPE - 2
ICAP_PIXELTYPE - 1
ICAP_UNITS - 0
ICAP_UNITS - 0
ICAP_UNITS - 1
ICAP_UNITS - 2
ICAP_UNITS - 3
ICAP_UNITS - 4
ICAP_XFERMECH - 0
ICAP_XFERMECH - 0
ICAP_XFERMECH - 1
CAP_AUTHOR - 
CAP_CAPTION - 
CAP_FEEDERENABLED - 0
CAP_FEEDERLOADED - 0
CAP_FEEDERLOADED - 1
CAP_TIMEDATE - 
CAP_SUPPORTEDCAPS - 0
CAP_SUPPORTEDCAPS - 1
CAP_SUPPORTEDCAPS - 256
CAP_SUPPORTEDCAPS - 257
CAP_SUPPORTEDCAPS - 258
CAP_SUPPORTEDCAPS - 259
CAP_SUPPORTEDCAPS - 4096
CAP_SUPPORTEDCAPS - 4097
CAP_SUPPORTEDCAPS - 4098
CAP_SUPPORTEDCAPS - 4099
CAP_SUPPORTEDCAPS - 4100
CAP_SUPPORTEDCAPS - 4101
CAP_SUPPORTEDCAPS - 4103
CAP_SUPPORTEDCAPS - 4107
CAP_SUPPORTEDCAPS - 4109
CAP_SUPPORTEDCAPS - 4110
CAP_SUPPORTEDCAPS - 4111
CAP_SUPPORTEDCAPS - 4112
CAP_SUPPORTEDCAPS - 4114
CAP_SUPPORTEDCAPS - 4115
CAP_SUPPORTEDCAPS - 4116
CAP_SUPPORTEDCAPS - 4117
CAP_SUPPORTEDCAPS - 4125
CAP_SUPPORTEDCAPS - 4127
CAP_SUPPORTEDCAPS - 4130
CAP_SUPPORTEDCAPS - 4132
CAP_SUPPORTEDCAPS - 4140
CAP_SUPPORTEDCAPS - 4141
CAP_SUPPORTEDCAPS - 4353
CAP_SUPPORTEDCAPS - 4355
CAP_SUPPORTEDCAPS - 4361
CAP_SUPPORTEDCAPS - 4364
CAP_SUPPORTEDCAPS - 4368
CAP_SUPPORTEDCAPS - 4369
CAP_SUPPORTEDCAPS - 4370
CAP_SUPPORTEDCAPS - 4372
CAP_SUPPORTEDCAPS - 4374
CAP_SUPPORTEDCAPS - 4375
CAP_SUPPORTEDCAPS - 4376
CAP_SUPPORTEDCAPS - 4377
CAP_SUPPORTEDCAPS - 4378
CAP_SUPPORTEDCAPS - 4380
CAP_SUPPORTEDCAPS - 4383
CAP_SUPPORTEDCAPS - 4384
CAP_SUPPORTEDCAPS - 4385
CAP_SUPPORTEDCAPS - 4386
CAP_SUPPORTEDCAPS - 4387
CAP_SUPPORTEDCAPS - 4390
CAP_SUPPORTEDCAPS - 4391
CAP_SUPPORTEDCAPS - 4392
CAP_SUPPORTEDCAPS - 4395
CAP_SUPPORTEDCAPS - 4396
CAP_SUPPORTEDCAPS - 4397
CAP_SUPPORTEDCAPS - 4399
CAP_SUPPORTEDCAPS - 4400
CAP_SUPPORTEDCAPS - 4401
CAP_SUPPORTEDCAPS - 4423
CAP_SUPPORTEDCAPS - 4424
CAP_SUPPORTEDCAPS - 4425
CAP_SUPPORTEDCAPS - 4432
CAP_SUPPORTEDCAPS - 4433
CAP_SUPPORTEDCAPS - 4435
CAP_SUPPORTEDCAPS - 32770
CAP_SUPPORTEDCAPS - 32771
CAP_SUPPORTEDCAPS - 32772
CAP_SUPPORTEDCAPS - 32774
CAP_SUPPORTEDCAPS - 32775
CAP_SUPPORTEDCAPS - 32797
CAP_SUPPORTEDCAPS - 32798
CAP_SUPPORTEDCAPS - 32800
CAP_SUPPORTEDCAPS - 32802
CAP_SUPPORTEDCAPS - 32803
CAP_SUPPORTEDCAPS - 32804
CAP_SUPPORTEDCAPS - 32805
CAP_SUPPORTEDCAPS - 32806
CAP_SUPPORTEDCAPS - 32808
CAP_SUPPORTEDCAPS - 32809
CAP_SUPPORTEDCAPS - 32812
CAP_SUPPORTEDCAPS - 32813
CAP_SUPPORTEDCAPS - 32814
CAP_SUPPORTEDCAPS - 32815
CAP_SUPPORTEDCAPS - 32817
CAP_SUPPORTEDCAPS - 32818
CAP_SUPPORTEDCAPS - 32854
CAP_SUPPORTEDCAPS - 32876
CAP_SUPPORTEDCAPS - 32884
CAP_SUPPORTEDCAPS - 32902
CAP_SUPPORTEDCAPS - 32905
CAP_SUPPORTEDCAPS - 32908
CAP_SUPPORTEDCAPS - 32909
CAP_SUPPORTEDCAPS - 32917
CAP_SUPPORTEDCAPS - 32918
CAP_SUPPORTEDCAPS - 32919
CAP_SUPPORTEDCAPS - 32920
CAP_SUPPORTEDCAPS - 32921
CAP_SUPPORTEDCAPS - 32922
CAP_SUPPORTEDCAPS - 32923
CAP_SUPPORTEDCAPS - 32924
CAP_SUPPORTEDCAPS - 32925
CAP_SUPPORTEDCAPS - 32926
CAP_SUPPORTEDCAPS - 32927
CAP_SUPPORTEDCAPS - 32940
CAP_SUPPORTEDCAPS - 32941
CAP_SUPPORTEDCAPS - 32945
CAP_SUPPORTEDCAPS - 32946
CAP_SUPPORTEDCAPS - 32947
CAP_SUPPORTEDCAPS - 32948
CAP_SUPPORTEDCAPS - 32949
CAP_SUPPORTEDCAPS - 32950
CAP_SUPPORTEDCAPS - 32951
CAP_SUPPORTEDCAPS - 32952
CAP_SUPPORTEDCAPS - 32953
CAP_SUPPORTEDCAPS - 32954
CAP_SUPPORTEDCAPS - 32964
CAP_SUPPORTEDCAPS - 32965
CAP_AUTOFEED - 0
CAP_INDICATORS - 0
CAP_INDICATORS - 1
CAP_PAPERDETECTABLE - 0
CAP_UICONTROLLABLE - 0
CAP_DEVICEONLINE - 0
CAP_DEVICEONLINE - 1
CAP_AUTOSCAN - 0
CAP_AUTOSCAN - 1
CAP_DUPLEX - 0
CAP_DUPLEXENABLED - 0
CAP_DUPLEXENABLED - 0
CAP_ENABLEDSUIONLY - 0
CAP_CUSTOMDSDATA - 0
CAP_CLEARBUFFERS - 0
CAP_DEVICETIMEDATE - 
CAP_SERIALNUMBER - 
CAP_LANGUAGE - 0
CAP_LANGUAGE - 13
CAP_LANGUAGE - 13
CAP_LANGUAGE - 13
CAP_LANGUAGE - 13
CAP_LANGUAGE - 13
CAP_LANGUAGE - 13
CAP_LANGUAGE - 13
CAP_LANGUAGE - 13
CAP_LANGUAGE - 13
CAP_LANGUAGE - 13
CAP_LANGUAGE - 13
CAP_LANGUAGE - 13
CAP_LANGUAGE - 13
CAP_LANGUAGE - 13
CAP_LANGUAGE - 13
CAP_LANGUAGE - 13
CAP_LANGUAGE - 13
CAP_LANGUAGE - 13
CAP_LANGUAGE - 13
CAP_LANGUAGE - 13
CAP_LANGUAGE - 13
CAP_LANGUAGE - 13
CAP_LANGUAGE - 13
CAP_LANGUAGE - 13
CAP_LANGUAGE - 13
CAP_LANGUAGE - 13
CAP_LANGUAGE - 13
CAP_LANGUAGE - 13
CAP_LANGUAGE - 13
CAP_LANGUAGE - 13
CAP_LANGUAGE - 13
CAP_LANGUAGE - 13
CAP_LANGUAGE - 13
CAP_LANGUAGE - 13
CAP_LANGUAGE - 13
CAP_LANGUAGE - 13
CAP_LANGUAGE - 13
CAP_LANGUAGE - 13
CAP_FEEDERALIGNMENT - 0
CAP_FEEDERALIGNMENT - 2
ICAP_CONTRAST - 0
ICAP_CONTRAST - -1000
ICAP_CONTRAST - -980
ICAP_CONTRAST - -960
ICAP_CONTRAST - -940
ICAP_CONTRAST - -920
ICAP_CONTRAST - -900
ICAP_CONTRAST - -880
ICAP_CONTRAST - -860
ICAP_CONTRAST - -840
ICAP_CONTRAST - -820
ICAP_CONTRAST - -800
ICAP_CONTRAST - -780
ICAP_CONTRAST - -760
ICAP_CONTRAST - -740
ICAP_CONTRAST - -720
ICAP_CONTRAST - -700
ICAP_CONTRAST - -680
ICAP_CONTRAST - -660
ICAP_CONTRAST - -640
ICAP_CONTRAST - -620
ICAP_CONTRAST - -600
ICAP_CONTRAST - -580
ICAP_CONTRAST - -560
ICAP_CONTRAST - -540
ICAP_CONTRAST - -520
ICAP_CONTRAST - -500
ICAP_CONTRAST - -480
ICAP_CONTRAST - -460
ICAP_CONTRAST - -440
ICAP_CONTRAST - -420
ICAP_CONTRAST - -400
ICAP_CONTRAST - -380
ICAP_CONTRAST - -360
ICAP_CONTRAST - -340
ICAP_CONTRAST - -320
ICAP_CONTRAST - -300
ICAP_CONTRAST - -280
ICAP_CONTRAST - -260
ICAP_CONTRAST - -240
ICAP_CONTRAST - -220
ICAP_CONTRAST - -200
ICAP_CONTRAST - -180
ICAP_CONTRAST - -160
ICAP_CONTRAST - -140
ICAP_CONTRAST - -120
ICAP_CONTRAST - -100
ICAP_CONTRAST - -80
ICAP_CONTRAST - -60
ICAP_CONTRAST - -40
ICAP_CONTRAST - -20
ICAP_CONTRAST - 0
ICAP_CONTRAST - 20
ICAP_CONTRAST - 40
ICAP_CONTRAST - 60
ICAP_CONTRAST - 80
ICAP_CONTRAST - 100
ICAP_CONTRAST - 120
ICAP_CONTRAST - 140
ICAP_CONTRAST - 160
ICAP_CONTRAST - 180
ICAP_CONTRAST - 200
ICAP_CONTRAST - 220
ICAP_CONTRAST - 240
ICAP_CONTRAST - 260
ICAP_CONTRAST - 280
ICAP_CONTRAST - 300
ICAP_CONTRAST - 320
ICAP_CONTRAST - 340
ICAP_CONTRAST - 360
ICAP_CONTRAST - 380
ICAP_CONTRAST - 400
ICAP_CONTRAST - 420
ICAP_CONTRAST - 440
ICAP_CONTRAST - 460
ICAP_CONTRAST - 480
ICAP_CONTRAST - 500
ICAP_CONTRAST - 520
ICAP_CONTRAST - 540
ICAP_CONTRAST - 560
ICAP_CONTRAST - 580
ICAP_CONTRAST - 600
ICAP_CONTRAST - 620
ICAP_CONTRAST - 640
ICAP_CONTRAST - 660
ICAP_CONTRAST - 680
ICAP_CONTRAST - 700
ICAP_CONTRAST - 720
ICAP_CONTRAST - 740
ICAP_CONTRAST - 760
ICAP_CONTRAST - 780
ICAP_CONTRAST - 800
ICAP_CONTRAST - 820
ICAP_CONTRAST - 840
ICAP_CONTRAST - 860
ICAP_CONTRAST - 880
ICAP_CONTRAST - 900
ICAP_CONTRAST - 920
ICAP_CONTRAST - 940
ICAP_CONTRAST - 960
ICAP_CONTRAST - 980
ICAP_HALFTONES - 
ICAP_HALFTONES - Auto ATP
ICAP_HALFTONES - Adaptive Thresholding
ICAP_IMAGEFILEFORMAT - 0
ICAP_IMAGEFILEFORMAT - 2
ICAP_PHYSICALWIDTH - 0
ICAP_PHYSICALHEIGHT - 0
ICAP_XNATIVERESOLUTION - 0
ICAP_YNATIVERESOLUTION - 0
ICAP_XRESOLUTION - 0
ICAP_XRESOLUTION - 75
ICAP_XRESOLUTION - 100
ICAP_XRESOLUTION - 150
ICAP_XRESOLUTION - 200
ICAP_XRESOLUTION - 240
ICAP_XRESOLUTION - 300
ICAP_XRESOLUTION - 400
ICAP_XRESOLUTION - 600
ICAP_YRESOLUTION - 0
ICAP_YRESOLUTION - 75
ICAP_YRESOLUTION - 100
ICAP_YRESOLUTION - 150
ICAP_YRESOLUTION - 200
ICAP_YRESOLUTION - 240
ICAP_YRESOLUTION - 300
ICAP_YRESOLUTION - 400
ICAP_YRESOLUTION - 600
ICAP_MAXFRAMES - 0
ICAP_BITORDER - 0
ICAP_PIXELFLAVOR - 0
ICAP_PIXELFLAVOR - 0
ICAP_PLANARCHUNKY - 0
ICAP_PLANARCHUNKY - 0
ICAP_ROTATION - 0
ICAP_ROTATION - 0
ICAP_ROTATION - 90
ICAP_ROTATION - 180
ICAP_SUPPORTEDSIZES - 0
ICAP_SUPPORTEDSIZES - 0
ICAP_SUPPORTEDSIZES - 3
ICAP_SUPPORTEDSIZES - 4
ICAP_SUPPORTEDSIZES - 10
ICAP_SUPPORTEDSIZES - 52
ICAP_SUPPORTEDSIZES - 1
ICAP_SUPPORTEDSIZES - 5
ICAP_SUPPORTEDSIZES - 13
ICAP_SUPPORTEDSIZES - 22
ICAP_SUPPORTEDSIZES - 29
ICAP_SUPPORTEDSIZES - 7
ICAP_SUPPORTEDSIZES - 30
ICAP_SUPPORTEDSIZES - 2
ICAP_SUPPORTEDSIZES - 39
ICAP_SUPPORTEDSIZES - 40
ICAP_SUPPORTEDSIZES - 41
ICAP_SUPPORTEDSIZES - 15
ICAP_SUPPORTEDSIZES - 16
ICAP_BITORDERCODES - 0
ICAP_PIXELFLAVORCODES - 0
ICAP_PIXELFLAVORCODES - 0
ICAP_BITDEPTH - 0
ICAP_BITDEPTHREDUCTION - 0
ICAP_BITDEPTHREDUCTION - 0
ICAP_BITDEPTHREDUCTION - 1
ICAP_UNDEFINEDIMAGESIZE - 0
ICAP_UNDEFINEDIMAGESIZE - 1
ICAP_EXTIMAGEINFO - 0
ICAP_EXTIMAGEINFO - 1
ICAP_MINIMUMHEIGHT - 0
ICAP_MINIMUMWIDTH - 0
ICAP_IMAGEFILTER - 0
ICAP_IMAGEFILTER - 0
ICAP_NOISEFILTER - 0
ICAP_NOISEFILTER - 0
ICAP_NOISEFILTER - 2
ICAP_AUTOMATICBORDERDETECTION - 0
ICAP_AUTOMATICBORDERDETECTION - 1
ICAP_AUTOMATICDESKEW - 0
ICAP_AUTOMATICDESKEW - 1
As you can see in the resulting .txt file, the blank page detection (and obviously many features) is nowhere to be found, whereas it's displayed in the driver UI :
DriverKodak.png
Driver UI
We have the same problem for doublefeed detection as well, for another example.

Thank you for your help !

Best regards,
Mickael Vest

User avatar
Loïc
Site Admin
Posts: 5881
Joined: Tue Oct 17, 2006 10:48 pm
Location: France
Contact:

Re: Issues to set TwainCapabilities

Post by Loïc » Thu Feb 23, 2012 3:28 pm

Hello Mickael,

You are not using the good approach to list all supported capabilities. What you have to do is to query the CAP_SUPPORTEDCAPS capability and cast each result to the TwainCapabilities enumeration.

So, based on your log your device supports the following capabilities:

Code: Select all

0
1
256
257
258
259
4096
4097
4098
4099
4100
4101
4103
4107
4109
4110
4111
4112
4114
4115
4116
4117
4125
4127
4130
4132
4140
4141
4353
4355
4361
4364
4368
4369
4370
4372
4374
4375
4376
4377
4378
4380
4383
4384
4385
4386
4387
4390
4391
4392
4395
4396
4397
4399
4400
4401
4423
4424
4425
4432
4433
4435
32770
32771
32772
32774
32775
32797
32798
32800
32802
32803
32804
32805
32806
32808
32809
32812
32813
32814
32815
32817
32818
32854
32876
32884
32902
32905
32908
32909
32917
32918
32919
32920
32921
32922
32923
32924
32925
32926
32927
32940
32941
32945
32946
32947
32948
32949
32950
32951
32952
32953
32954
32964
32965
The blank page detection feature is formalized by the ICAP_AUTODISCARDBLANKPAGES capability in the TWAIN specs (http://www.twain.org). The value is 0x1134 (4404 in decimal).
As you can see, the 4404 value is not reported as a supported capability by your TWAIN driver.

The reason can be:

1- Your scanner do not support this feature.
2- Your scanner support this feature but your TWAIN driver do not exposes it through TWAIN mechanism.
3- Your scanner support this feature but your TWAIN driver exposes it through TWAIN by using another non predefined capability ID (also known as custom capability). In such case only the device manufacturer can provide the proper value. You will be able to use it by using our low level API (as you already done in your snippet).

I think you are in the second or in the third situation.

In case you are in the second situation, I can suggest you to try to play with the custom reported capabilities and try to determine which one control the expected feature. Good luck for that...
The max cap value (in TWAIN 2.1) is ICAP_CAP_CUSTOMBASE 0x8000 /* Base of custom capabilities */ (32768)

So I can tell so far you driver exposes these custom caps:

Code: Select all

32770
32771
32772
32774
32775
32797
32798
32800
32802
32803
32804
32805
32806
32808
32809
32812
32813
32814
32815
32817
32818
32854
32876
32884
32902
32905
32908
32909
32917
32918
32919
32920
32921
32922
32923
32924
32925
32926
32927
32940
32941
32945
32946
32947
32948
32949
32950
32951
32952
32953
32954
32964
32965

Hope this helps and clarify.

Let me know if you need further explanations.

Kind regards,

Loïc

Post Reply

Who is online

Users browsing this forum: No registered users and 2 guests