WIA自动化扫描仪色彩的意图不工作 [英] WIA Automation for scanner color intent is not working
问题描述
我不能让我的佳能PIXMA MP150扫描从C#code彩色扫描。下面code是导致黑白图像,或者如果我的6146值更改为2,然后创建一个灰度图像。我希望能有从code彩色扫描。我知道扫描仪确实彩色图像,因为我可以通过在扫描仪和相机的XP向导做一。
谁能帮我找出什么价值,我没有设定一个彩色扫描。所有的文档和例子我能找到的只是说改变6146的值。
感谢您抽出时间阅读本!
私人无效ScanAndSaveOnePage()
{
WIA.CommonDialog Dialog1 =新WIA.CommonDialogClass();
WIA.DeviceManager DeviceManager1 =新WIA.DeviceManagerClass();
System.Object的Object1 = NULL;
System.Object的Object2的= NULL;
WIA.Device扫描仪= NULL; 扫描仪= Dialog1.ShowSelectDevice(WIA.WiaDeviceType.ScannerDeviceType,假的,假的); WIA.Item项目1 = Scanner.Items [1]; setItem(项目1,6146,1);
setItem(项目1,6147,150);
setItem(项目1,6148,150);
setItem(项目1,6151,150 * 8.5);
setItem(项目1,6152,150 * 11); WIA.ImageFile = Image1的新WIA.ImageFile();
WIA.ImageProcess ImageProcess1 =新WIA.ImageProcess();
Object1 =(对象)转换;
ImageProcess1.Filters.Add(ImageProcess1.FilterInfos.get_Item(REF Object1).FilterID,0); Object1 =(对象)FormatID
= Object2的(对象)WIA.FormatID.wiaFormatBMP;
ImageProcess1.Filters [1] .Properties.get_Item(参考Object1).set_Value(REF Object2的); Object1 = NULL;
Object2的= NULL; 此搜索=(WIA.ImageFile)Item1.Transfer(WIA.FormatID.wiaFormatBMP); 字符串DestImagePath = @C:\\ TEST.BMP
File.Delete(DestImagePath);
Image1.SaveFile(DestImagePath);
} 私人无效setItem(的iItem项目,对象属性,对象的值)
{
WIA.Property aProperty = item.Properties.get_Item(REF属性);
aProperty.set_Value(参考值);
}
在情况下,其他人很纳闷,你必须设置4104为好。默认情况下,被设定为1位深度。这奏效了我。
setItem(项目1,4104,24);
为了找到这一点,我不得不列举的所有属性,看看它们被设置为:
的foreach(房产propertyItem在item.Properties)
{
如果(!propertyItem.IsReadOnly)
{
Console.WriteLine(的String.Format({0} \\ t {1} \\ t {2},propertyItem.Name,propertyItem.PropertyID,propertyItem.get_Value()));
}
}
I cannot get my Canon Pixma MP150 to scan a color scan from c# code. The following code is resulting in a black and white image, or if I change the value of 6146 to 2 then a grayscale image is created. I would like to be able to have a color scan from code. I know the scanner does color images because I can do one through the xp wizard in "scanners and camera". Can anyone help me figure out what value I am not setting for a color scan. All documentation and examples I can find just say to change the value of 6146.
Thank you for taking the time to read this!
private void ScanAndSaveOnePage ()
{
WIA.CommonDialog Dialog1 = new WIA.CommonDialogClass();
WIA.DeviceManager DeviceManager1 = new WIA.DeviceManagerClass();
System.Object Object1 = null;
System.Object Object2 = null;
WIA.Device Scanner = null;
Scanner = Dialog1.ShowSelectDevice(WIA.WiaDeviceType.ScannerDeviceType, false, false);
WIA.Item Item1 = Scanner.Items[1];
setItem(Item1, "6146", 1);
setItem(Item1, "6147", 150);
setItem(Item1, "6148", 150);
setItem(Item1, "6151", 150 * 8.5);
setItem(Item1, "6152", 150 * 11);
WIA.ImageFile Image1 = new WIA.ImageFile();
WIA.ImageProcess ImageProcess1 = new WIA.ImageProcess();
Object1 = (Object)"Convert";
ImageProcess1.Filters.Add(ImageProcess1.FilterInfos.get_Item(ref Object1).FilterID, 0);
Object1 = (Object)"FormatID";
Object2 = (Object)WIA.FormatID.wiaFormatBMP;
ImageProcess1.Filters[1].Properties.get_Item(ref Object1).set_Value(ref Object2);
Object1 = null;
Object2 = null;
Image1 = (WIA.ImageFile)Item1.Transfer(WIA.FormatID.wiaFormatBMP);
string DestImagePath = @"C:\test.bmp";
File.Delete(DestImagePath);
Image1.SaveFile(DestImagePath);
}
private void setItem (IItem item, object property, object value)
{
WIA.Property aProperty = item.Properties.get_Item(ref property);
aProperty.set_Value(ref value);
}
In case anyone else is wondering, you have to set "4104" as well. By default it was set to 1 bit depth. That did the trick for me.
setItem(Item1, "4104", 24);
In order to find this out, I had to enumerate all the properties and see what they were set to:
foreach (Property propertyItem in item.Properties)
{
if (!propertyItem.IsReadOnly)
{
Console.WriteLine(String.Format("{0}\t{1}\t{2}", propertyItem.Name, propertyItem.PropertyID, propertyItem.get_Value()));
}
}
这篇关于WIA自动化扫描仪色彩的意图不工作的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!