如何获得扫描仪的可用分辨率和/或dpi。另外,如何获取自动文档进纸器等信息?
答案 0 :(得分:5)
您可以通过像Matthias建议的那样导航属性对象来检索扫描仪可用的功能。 这是我用的所有属性及其ID的枚举:
public enum WiaProperty
{
DeviceId = 2,
Manufacturer = 3,
Description = 4,
Type = 5,
Port = 6,
Name = 7,
Server = 8,
RemoteDevId = 9,
UIClassId = 10,
FirmwareVersion = 1026,
ConnectStatus = 1027,
DeviceTime = 1028,
PicturesTaken = 2050,
PicturesRemaining = 2051,
ExposureMode = 2052,
ExposureCompensation = 2053,
ExposureTime = 2054,
FNumber = 2055,
FlashMode = 2056,
FocusMode = 2057,
FocusManualDist = 2058,
ZoomPosition = 2059,
PanPosition = 2060,
TiltPostion = 2061,
TimerMode = 2062,
TimerValue = 2063,
PowerMode = 2064,
BatteryStatus = 2065,
Dimension = 2070,
HorizontalBedSize = 3074,
VerticalBedSize = 3075,
HorizontalSheetFeedSize = 3076,
VerticalSheetFeedSize = 3077,
SheetFeederRegistration = 3078, // 0 = LEFT_JUSTIFIED, 1 = CENTERED, 2 = RIGHT_JUSTIFIED
HorizontalBedRegistration = 3079, // 0 = LEFT_JUSTIFIED, 1 = CENTERED, 2 = RIGHT_JUSTIFIED
VerticalBedRegistraion = 3080, // 0 = TOP_JUSTIFIED, 1 = CENTERED, 2 = BOTTOM_JUSTIFIED
PlatenColor = 3081,
PadColor = 3082,
FilterSelect = 3083,
DitherSelect = 3084,
DitherPatternData = 3085,
DocumentHandlingCapabilities = 3086, // FEED = 0x01, FLAT = 0x02, DUP = 0x04, DETECT_FLAT = 0x08,
// DETECT_SCAN = 0x10, DETECT_FEED = 0x20, DETECT_DUP = 0x40,
// DETECT_FEED_AVAIL = 0x80, DETECT_DUP_AVAIL = 0x100
DocumentHandlingStatus = 3087, // FEED_READY = 0x01, FLAT_READY = 0x02, DUP_READY = 0x04,
// FLAT_COVER_UP = 0x08, PATH_COVER_UP = 0x10, PAPER_JAM = 0x20
DocumentHandlingSelect = 3088, // FEEDER = 0x001, FLATBED = 0x002, DUPLEX = 0x004, FRONT_FIRST = 0x008
// BACK_FIRST = 0x010, FRONT_ONLY = 0x020, BACK_ONLY = 0x040
// NEXT_PAGE = 0x080, PREFEED = 0x100, AUTO_ADVANCE = 0x200
DocumentHandlingCapacity = 3089,
HorizontalOpticalResolution = 3090,
VerticalOpticalResolution = 3091,
EndorserCharacters = 3092,
EndorserString = 3093,
ScanAheadPages = 3094, // ALL_PAGES = 0
MaxScanTime = 3095,
Pages = 3096, // ALL_PAGES = 0
PageSize = 3097, // A4 = 0, LETTER = 1, CUSTOM = 2
PageWidth = 3098,
PageHeight = 3099,
Preview = 3100, // FINAL_SCAN = 0, PREVIEW = 1
TransparencyAdapter = 3101,
TransparecnyAdapterSelect = 3102,
ItemName = 4098,
FullItemName = 4099,
ItemTimeStamp = 4100,
ItemFlags = 4101,
AccessRights = 4102,
DataType = 4103,
BitsPerPixel = 4104,
PreferredFormat = 4105,
Format = 4106,
Compression = 4107, // 0 = NONE, JPG = 5, PNG = 8
MediaType = 4108,
ChannelsPerPixel = 4109,
BitsPerChannel = 4110,
Planar = 4111,
PixelsPerLine = 4112,
BytesPerLine = 4113,
NumberOfLines = 4114,
GammaCurves = 4115,
ItemSize = 4116,
ColorProfiles = 4117,
BufferSize = 4118,
RegionType = 4119,
ColorProfileName = 4120,
ApplicationAppliesColorMapping = 4121,
StreamCompatibilityId = 4122,
ThumbData = 5122,
ThumbWidth = 5123,
ThumbHeight = 5124,
AudioAvailable = 5125,
AudioFormat = 5126,
AudioData = 5127,
PicturesPerRow = 5128,
SequenceNumber = 5129,
TimeDelay = 5130,
CurrentIntent = 6146,
HorizontalResolution = 6147,
VerticalResolution = 6148,
HorizontalStartPosition = 6149,
VerticalStartPosition = 6150,
HorizontalExtent = 6151,
VerticalExtent = 6152,
PhotometricInterpretation = 6153,
Brightness = 6154,
Contrast = 6155,
Orientation = 6156, // 0 = PORTRAIT, 1 = LANDSCAPE, 2 = 180°, 3 = 270°
Rotation = 6157, // 0 = PORTRAIT, 1 = LANDSCAPE, 2 = 180°, 3 = 270°
Mirror = 6158,
Threshold = 6159,
Invert = 6160,
LampWarmUpTime = 6161,
}
有关每个属性的可能值,您可以阅读MSDN文档:
或者如果您想深入了解,可以分析原始SDK的头文件。
答案 1 :(得分:1)
您可以使用包含属性列表的Properties对象。使用Device对象的Properties对象访问扫描仪属性(文档进纸器),使用Item对象的Properties对象访问页面属性(分辨率)。
以下是一些代码:
DeviceManager manager = new DeviceManagerClass();
DeviceInfo scannerInfo = WiaHelper.FindFirstScanner(manager);
Device device = scannerInfo.Connect();
Item item = device.Items[1];
public static DeviceInfo FindFirstScanner(DeviceManager manager)
{
DeviceInfos infos = manager.DeviceInfos;
foreach (DeviceInfo info in infos)
if (info.Type == WiaDeviceType.ScannerDeviceType)
return info;
return null;
}
public static Property FindProperty(WIA.Properties properties, int propertyId)
{
foreach (Property property in properties)
if (property.PropertyID == propertyId)
return property;
return null;
}
public static void SetDeviceProperty(Device device, int propertyId, object value)
{
Property property = FindProperty(device.Properties, propertyId);
if (property != null)
property.set_Value(value);
}
public static object GetDeviceProperty(Device device, int propertyId)
{
Property property = FindProperty(device.Properties, propertyId);
return property != null ? property.get_Value() : null;
}
public static object GetItemProperty(Item item, int propertyId)
{
Property property = FindProperty(item.Properties, propertyId);
return property != null ? property.get_Value() : null;
}
public static void SetItemProperty(Item item, int propertyId, object value)
{
Property property = FindProperty(item.Properties, propertyId);
if (property != null)
property.set_Value(value);
}