Utilisation d'un scanner sans boîte de dialogue en C #
Je suis en train de construire un .Net 4.0 application pour le contrôle à distance d'un appareil de scanner. J'ai essayé les deux TWAIN et WIA bibliothèques, mais j'ai le même problème. La numérisation des images sans de sélection du scanneur et les paramètres de l'analyse des boîtes de dialogue.
J'ai trouvé un article utile sur WIA script .Netet l'a modifié à ceci:
private Image Scan(string deviceName)
{
WiaClass wiaManager = null; //WIA manager COM object
CollectionClass wiaDevs = null; //WIA devices collection COM object
ItemClass wiaRoot = null; //WIA root device COM object
CollectionClass wiaPics = null; //WIA collection COM object
ItemClass wiaItem = null; //WIA image COM object
try
{
//create COM instance of WIA manager
wiaManager = new WiaClass();
//call Wia.Devices to get all devices
wiaDevs = wiaManager.Devices as CollectionClass;
if ((wiaDevs == null) || (wiaDevs.Count == 0))
{
throw new Exception("No WIA devices found!");
}
object device = null;
foreach (IWiaDeviceInfo currentDevice in wiaManager.Devices)
{
if (currentDevice.Name == deviceName)
{
device = currentDevice;
break;
}
}
if (device == null)
{
throw new Exception
(
"Device with name \"" +
deviceName +
"\" could not be found."
);
}
//select device
wiaRoot = (ItemClass)wiaManager.Create(ref device);
//something went wrong
if (wiaRoot == null)
{
throw new Exception
(
"Could not initialize device \"" +
deviceName + "\"."
);
}
wiaPics = wiaRoot.GetItemsFromUI
(
WiaFlag.SingleImage,
WiaIntent.ImageTypeColor
) as CollectionClass;
if (wiaPics == null || wiaPics.Count == 0)
{
throw new Exception("Could not scan image.");
}
Image image = null;
//enumerate all the pictures the user selected
foreach (object wiaObj in wiaPics)
{
if (image == null)
{
wiaItem = (ItemClass)Marshal.CreateWrapperOfType
(
wiaObj, typeof(ItemClass)
);
//create temporary file for image
string tempFile = Path.GetTempFileName();
//transfer picture to our temporary file
wiaItem.Transfer(tempFile, false);
//create Image instance from file
image = Image.FromFile(tempFile);
}
//release enumerated COM object
Marshal.ReleaseComObject(wiaObj);
}
if (image == null)
{
throw new Exception("Error reading scanned image.");
}
return image;
}
finally
{
//release WIA image COM object
if (wiaItem != null)
Marshal.ReleaseComObject(wiaItem);
//release WIA collection COM object
if (wiaPics != null)
Marshal.ReleaseComObject(wiaPics);
//release WIA root device COM object
if (wiaRoot != null)
Marshal.ReleaseComObject(wiaRoot);
//release WIA devices collection COM object
if (wiaDevs != null)
Marshal.ReleaseComObject(wiaDevs);
//release WIA manager COM object
if (wiaManager != null)
Marshal.ReleaseComObject(wiaManager);
}
}
Avec ce j'ai effectivement réussi à sélectionner l'appareil de configuration (paramètre d'entrée de la méthode de Scan) et de récupérer le résultat de l'image après la numérisation.
Mais le problème de la boîte de dialogue options de numérisation (la Numérisation en utilisant le nom de périphérique). Comme c'est une application de contrôle à distance, le dialogue ne sera pas visible pour l'utilisateur, donc j'ai besoin soit de sauter à l'aide des paramètres par défaut ou utiliser les paramètres d'une configuration si nécessaire.
Options de numérisation boîte de dialogue:
source d'informationauteur Miljenko Barbir
Vous devez vous connecter pour publier un commentaire.
En fin de compte je n'ai pas utilisé le code écrit dans la question de la numérisation des boîtes de dialogue. J'ai trouvé un exemple utile de Numérisation avec Windows Image Acquisition 2.0 de la bibliothèque et l'a modifié pour correspondre à mes besoins. La numérisation sans les boîtes de dialogue.
J'ai écrit un article sur À l'aide d'un scanner sans dialogues .Net avec un exemple d'application écrite en C#.
Tout d'abord, un grand merci à Miljenko Barbir pour sa solution ci-dessus, il fonctionne très bien.
Je voudrais ajouter que si vous voulez zéro boîtes de dialogue, vous pouvez utiliser (à partir de Milijenko du code de démonstration)
au lieu de
En fait cela supprime la barre de progression, de sorte que vous obtenez la numérisation sans les boîtes de dialogue.
Vous pouvez le voir dans ce code que j'ai mis en place.