Automação WIA para intenção cor do scanner não está funcionando

votos
7

Eu não posso começar a minha Canon Pixma MP150 para digitalizar uma digitalização a cores a partir de código c #. O código a seguir está resultando em uma imagem em preto e branco, ou se eu mudar o valor de 6146-2, em seguida, uma imagem em tons de cinza é criado. Eu gostaria de ser capaz de ter uma digitalização a cores a partir do código. Eu sei que o scanner faz imagens a cores, porque eu posso fazer um através do assistente xp em scanners e câmera. Alguém pode me ajudar a descobrir o valor que eu não estou ajustando para uma digitalização colorida. Toda a documentação e exemplos que eu posso encontrar apenas dizer para mudar o valor de 6146.

Obrigado por separar um tempo para ler isso!

    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);
    }
Publicado 28/06/2009 em 20:30
fonte usuário
Em outras línguas...                            


1 respostas

votos
8

No caso de alguém está se perguntando, você tem que definir "4104" também. Por padrão, ele foi criado à profundidade de 1 bit. Isso fez o truque para mim.

setItem(Item1, "4104", 24);

A fim de descobrir isso, eu tive que enumerar todas as propriedades e ver o que eles foram criados para:

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()));
    }
}
Respondeu 01/05/2010 em 02:10
fonte usuário

Cookies help us deliver our services. By using our services, you agree to our use of cookies. Learn more