2009-05-26 9 views
5

J'ai un programme C# (WinForm) qui prend en charge la numérisation à l'aide de WIA. J'essaie de définir les propriétés du périphérique avant d'analyser un ou plusieurs documents. Principalement, je veux définir le format de papier pour le scanner. Voici un extrait du code:Acquisition d'images Windows - Définition des propriétés du périphérique en C#

foreach (Property property in selectedDevice.Properties) 
{ 
    //WiaProperties.WiaDpsHorizontalBedSize is my constant 
    if (property.PropertyID == WiaProperties.WiaDpsHorizontalBedSize) 
    { 
     //Set property value here...    
    } 
} 

Je trouve la propriété Taille horizontale de lit, mais la question est de savoir comment je l'ai mis à une valeur? Il existe une propriété set_Value hors de la propriété mais qui semble prendre une référence à un objet résultat. Donc, je suis à une perte quant à la façon dont je peux définir les propriétés sur un appareil?

Répondre

10

Je travaille également sur un projet de numérisation, et il y a très peu d'exemples WIA. Ce code est ce que vous cherchez pour définir la taille du lit, DPI, etc Découvrez la méthode SetProperty avec un exemple sur la façon de traiter set_Value.

class Scan 
{ 
    // Scanner only device properties (DPS) 
    public const int WIA_RESERVED_FOR_NEW_PROPS = 1024; 
    public const int WIA_DIP_FIRST = 2; 
    public const int WIA_DPA_FIRST = WIA_DIP_FIRST + WIA_RESERVED_FOR_NEW_PROPS; 
    public const int WIA_DPC_FIRST = WIA_DPA_FIRST + WIA_RESERVED_FOR_NEW_PROPS; 
    public const int WIA_DPS_FIRST = WIA_DPC_FIRST + WIA_RESERVED_FOR_NEW_PROPS; 
    public const int WIA_DPS_DOCUMENT_HANDLING_STATUS = WIA_DPS_FIRST + 13; 
    public const int WIA_DPS_DOCUMENT_HANDLING_SELECT = WIA_DPS_FIRST + 14; 
    public const int FEEDER = 1; 
    public const int FLATBED = 2; 
    public const int DUPLEX = 4; 
    public const int FEED_READY = 1; 

    WIA.CommonDialog _dialog = new WIA.CommonDialog(); 
    WIA.Device _scanner; 

    public void ADFScan() 
    { 

     _dialog = new CommonDialogClass(); 
     _scanner = _dialog.ShowSelectDevice(WIA.WiaDeviceType.ScannerDeviceType, false, false); 


     foreach (Property item in _scanner.Items[1].Properties) 
     { 
      switch (item.PropertyID) 
      { 
       case 6146: //4 is Black-white,gray is 2, color 1 
        SetProperty(item, 2); 
        break; 
       case 6147: //dots per inch/horizontal 
        SetProperty(item, 100); 
        break; 
       case 6148: //dots per inch/vertical 
        SetProperty(item, 100); 
        break; 
       case 6149: //x point where to start scan 
        SetProperty(item, 0); 
        break; 
       case 6150: //y-point where to start scan 
        SetProperty(item, 0); 
        break; 
       case 6151: //horizontal exent 
        SetProperty(item, (int)(8.5 * 100)); 
        break; 
       case 6152: //vertical extent 
        SetProperty(item, 11 * 100); 
        break; 
      } 
     } 
     ImageFile image = (ImageFile)_scanner.Items[1].Transfer(FormatID.wiaFormatPNG); 
     System.IO.File.Delete("tmp.png"); 
     image.SaveFile("tmp.png"); 
    } 

    private void SetProperty(Property property, int value) 
    { 
     IProperty x = (IProperty)property; 
     Object val = value; 
     x.set_Value(ref val); 
    } 


    public void test() 
    { 
     bool WantsToScan = true; 
     while (WantsToScan) ScanAndSaveOnePage(); 

    } 


    static void Main(string[] args) 
    { 
     new Scan().test(); 
    } 
} 
+0

Nice. Pourriez-vous m'expliquer pourquoi cette distribution est nécessaire? propriété IProperty x = (propriété IP); – driAn

Questions connexes