2009-02-26 3 views
0

EDITSolution trouvée: Voir le message ci-dessous.Lecture d'une image bitmap à partir d'un fichier TIF - Fonctionne dans WinForms non dans ASP.NET

Nous écrivons une bibliothèque qui lit dans un fichier TIF à partir d'un scanner. Fondamentalement, c'est un scantron. Nous examinons la forme et en lisons les valeurs.

Actuellement, nous avons une application de test Windows, et nous lui donnons un chemin de fichier sous forme de chaîne ("c: \ testing \ image.tif"). Il charge le tif, lit le document correctement et analyse les valeurs.

Nous avons également une application Web ASP.NET. Nous avons une page de test qui fait exactement ce que l'application Windows fait, nous lui donnons une chaîne identique, et j'appelle la même fonction sur la même classe de la même bibliothèque. Cependant, il ne lit PAS correctement le formulaire. Nous avons vérifié qu'il charge effectivement le fichier tif, et il est en fait rempli de données (les pixels que nous attendons d'être blancs/noirs sont blancs/noirs lorsque nous examinons l'obet Bitmap dans la fenêtre immédiate de Visual Studio).

Le problème spécifique est dans une bibliothèque appelée DataMatrix que nous utilisons pour scanner un code-barres hors du document. Cette fonction est supposée renvoyer un List<string>, dont chacun est un code-barres de la bibliothèque trouvée sur le document. Dans l'application Windows, cette fonction (DataMatrixDecoder.DecodeBarcode (bitmap)) renvoie correctement avec un nombre = 1. Lorsque vous utilisez l'application asp.net, cela renvoie Count = 0.

Parce que c'est exactement le même fichier image, je ne peux pas imaginer que le problème est dans DataMatrix. Je peux seulement assumer son quelque chose avec ASP.NET ou quelque chose.

Ce n'est même pas mon projet, mais un autre gars et moi aidons notre collègue à comprendre cela, et nous ne faisons que nous arracher les cheveux. Tous les signes indiquent qu'ASP.NET charge et transfère correctement l'image du disque à la classe "processor" (qui est une bibliothèque de classes qui utilise le composant DataMatrix, nous ne faisons AUCUN code dans ASP.NET à l'exception de l'ouverture/du transfert du fichier à la fonction.).

Est-ce que quelqu'un a des idées sur ce que cela pourrait être, ou des choses différentes que nous pouvons vérifier?

Je ne suis même pas sûr du type d'informations à donner, alors j'ai essayé de tout dire, si vous avez des questions, n'hésitez pas à me contacter. Je serais plus qu'heureux d'élaborer sur quoi que ce soit. Merci.

modifier: c'est le code sur le ascx.cs code-behind, dans un événement de bouton-cliquez sur:

if (formReader.ReadTIFF(@"c:\testing\image.tif")) 
{ 
    messages.Controls.Add(HtmlHelper.DivSuccess("Read successful.")); 
} 

La classe formReader puis ouvrez le fichier avec un FileStream et utilise pour créer un Bitmap. L'application ASP.NET n'ouvre pas du tout le fichier (nous l'avons téléchargé via un contrôle FormUpload, mais après avoir rencontré des problèmes, nous l'avons réduit à cela). C'est la chose la plus embarrassante, que cela fonctionne dans l'application Windows, mais pas à partir de ce site Web. ASP.NET dispose des autorisations complètes sur ce dossier pour faire ce qu'il veut. Il peut ouvrir l'image correctement, et l'image bitmap qu'il crée à partir du FileStream est l'image réelle.

edit: De plus, la fonction ReadTIFF copie maintenant le FileStream dans un MemoryStream, ce qui garantit qu'il n'y a pas de problème de streaming à partir du disque (le fichier entier est en mémoire).

Répondre

0

EDIT Solution Trouvé: Le problème est que la boîte de dialogue de fichier ouvert est en train de changer le CurrentWorkingDirectory. La raison pour laquelle le site n'a jamais fonctionné, était parce que le Environment.CurrentDirectory a été mal défini. Lorsque je définis manuellement le CurrentDirectory sur le dossier bin du site Web, l'analyse fonctionne correctement.


Petite mise à jour. L'utilisation de l'application Windows et la sélection du fichier via OpenFileDialog entraîneront l'échec du décodeur de code-barres. Techniquement, j'utilise le exact même chaîne à la main à l'analyseur ("c: \ test \ image.tif"), mais quand j'utilise le OpenFileDialog pour obtenir la chaîne, le décodeur échoue. Y a-t-il une idée à cela?

mise à jour: En fait, même si je ne l'utilise pas la chaîne du OpenFileDialog me donne, si je viens d'ouvrir le fichier de dialogue du tout, il échouera. Je ne comprends pas ça. C'est quelque chose de simple. J'ai besoin de déboguer la bibliothèque C++ DataMatrix, vraiment.

0

Comment passez-vous le chemin de fichier à l'application Web?
Il est possible que la fonction Decodes puisse avaler une exception.

Utilisez un réflecteur pour examiner la bibliothèque (si vous ne l'avez pas écrite).

+0

J'ai mis à jour mon poste – goldenratio

0

Je suis d'accord. Il semble que votre problème soit probablement lié aux droits d'utilisateur sur le répertoire dans lequel vous essayez d'accéder aux fichiers. Essayez de donner à vos utilisateurs Web les droits d'accès complet sur le répertoire source.

+0

Les images s'ouvrent bien, je ne crois pas que ce soit un problème de droits. Une fois que j'ai un bitmap d'un MemoryStream, les droits ne s'appliquent plus. – goldenratio

Questions connexes