2009-05-26 27 views
5

Tôi có chương trình C# (WinForm) hỗ trợ quét bằng WIA. Tôi đang cố gắng đặt thuộc tính thiết bị trước khi quét một hoặc nhiều tài liệu. Chủ yếu là tôi muốn đặt khổ giấy cho máy quét. Sau đây là một đoạn mã:Thu nhận hình ảnh Windows - thiết lập thuộc tính thiết bị trong C#

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

Tôi đang tìm thuộc tính Kích thước giường ngang, nhưng câu hỏi là làm cách nào để đặt giá trị thành giá trị? Có một thuộc tính set_Value tắt thuộc tính nhưng dường như có một tham chiếu đến một đối tượng kết quả. Vì vậy, tôi đang thua lỗ như thế nào tôi có thể thiết lập các thuộc tính trên một thiết bị?

Trả lời

10

Tôi cũng đang làm việc trên một dự án quét và có rất ít ví dụ về WIA. Mã này là những gì bạn đang tìm kiếm để thiết lập kích thước giường, DPI, vv Kiểm tra phương pháp SetProperty với một ví dụ về cách đối phó với 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

Tốt. Bạn có thể giải thích cho tôi tại sao diễn viên này là cần thiết không? Thuộc tính IProperty x = (IProperty); – driAn

Các vấn đề liên quan