2010-10-19 5 views
0

J'ai un composant pour le téléchargement d'un fichier image. Toutefois, je souhaite également pouvoir vérifier les paramètres DPI car ces images seront éventuellement imprimées et soumises sur papier.Résolution de résolution (DPI) d'une image téléchargée

Dans ASP.net, je peux habituellement faire quelque chose comme ceci:

using (var rawBitmap = new Bitmap(postedFile.InputStream)){ 
    var dpi = (decimal)rawBitmap.VerticalResolution/bitmap.Height;  
    // do other stuff. 
} 

Cependant, dans silverlight, je n'ai pas accès aux mêmes bibliothèques afin de le faire (cela dit, cela est mon premier coup à Silverlight, donc s'il y a un moyen d'obtenir ces dlls, je suis tout à fait pour, mais je ne pouvais pas obtenir mon emballage utilitaire importé).

J'ai vu beaucoup de recommandations pour FJcore (imagetools enveloppe également cette bibliothèque), un utilitaire de codage/décodage JPEG. En théorie, on charge le flux JPEG dans le décodeur et obtient des informations. J'ai essayé d'utiliser l'approche avec FJcore, mais tous les fichiers que je sauvegarde de photoshop semblent manquer l'en-tête correct qui indique l'étoile du fichier, ce qui provoque l'échec du décodeur. J'ai également confirmé ce problème en utilisant leurs tests unitaires.

Des idées sur la façon de tirer la résolution d'image d'un téléchargement de fichier dans Silverlight?

Répondre

3

Le DPI de l'image n'est pas toujours stocké sur l'image. Il s'agit généralement d'une propriété supplémentaire enregistrée en tant que métadonnées lors de la capture par le scanner (ou la caméra). Vous pouvez réellement voir que si vous chargez un JPEG en C# en utilisant Bitmap et enregistrez-le à nouveau, la propriété DPI est perdue et la valeur par défaut 96.

Donc, ce n'est malheureusement pas une option toujours fiable. Je ne pense pas qu'il y ait une chance de l'obtenir pour toutes les images. DPI n'est en fait pas pertinent pour les images qui ne sont pas créées par les scanners.

+0

[EXIF] (http://en.wikipedia.org/wiki/Exchangeable_image_file_format) est souvent utilisée par les appareils photo numériques. Malheureusement, il est essentiellement pris en charge uniquement pour les images JPEG et TIFF :(Il existe des liens de la page wiki pour d'autres formats, YMMV et s'amuser, mais je ne suis pas tout à fait ce que DPI a dans le sens appareil photo :-) –

+0

J'avais pensé que c'était bizarre que les bitmaps aient même une propriété DPI, ce qui est bien. Dans notre cas, la préservation du DPI n'est pas vraiment importante, mais l'extraction de la taille d'impression est. J'espérais une autre bibliothèque pour analyser la méta-info, mais je suppose que c'est comme ça. – ddango

+0

Exactement. DPI est dépendant du contexte du périphérique, mais pour les caméras, cela n'a pas de sens. – Aliostad

0

Essayez F J assemblages du coeur pour trouver des DPI de l'image dans silverlight

FileStream stream = imageFiles.OpenRead(); 
DecodedJpeg jpegImage = new JpegDecoder(stream).Decode(); 
int imageDpi = jpegImage.Image.DensityX;