2010-11-26 42 views
3

pour un aperçu du TIFF-documents numérisés actuellement j'utilise les éléments suivants:conversion d'image TIFF rapide à afficher dans Web-client

Bitmap bmp = new Bitmap(@"document.tif"); 
var ms = new MemoryStream(); 

bmp.Save(ms, ImageFormat.Png); 

var bmpBytes = ms.GetBuffer(); 
bmp.Dispose(); 
ms.Close(); 

return new FileStreamResult(new MemoryStream(bmpBytes), "image/png"); 

Est-il possible d'accélérer la conversion? En utilisant autre chose que la méthode Image.Save() standard?

J'ai trouvé une classe non sécurisée qui verrouille et déverrouille bitmapData entre la manipulation de pixels here, mais je ne suis pas sûr que ce soit adapté à ma tâche (car je n'ai qu'à passer d'un format à un autre). Cependant, mon profileur montre à propos 30ms victoire (avant 116 ms, après 83 ms)

Répondre

1

FreeImage est une grande bibliothèque de manipulation d'images, il y a des wrappers C# pour elle. Vous pouvez également trouver le FreeImage .NET documentation.

Assez mature donc plusieurs éléments sont hautement optimisés.

+0

Merci! Je vais vérifier dans un proche avenir pour comparer avec la solution actuelle via la bibliothèque Atalasoft. – barser

+0

Selon la documentation c'est ce que je veux! Merci encore!)) – barser

0

J'utilise un outil externe pour la conversion: http://www.imagemagick.org/script/index.php

Il est beaucoup plus rapide.

Mise à jour

quelque chose comme ça:

var sourceFile = "C:\\yourscanned.tiff"; 
var destFile = Path.GetTempPath() + "\\yourpng.tmp"; 
var process = Process.Start("C:\path\to\imagick\convert.exe", sourceFile + " " + destFile); 
process.WaitForExit(); 

FileStream myStream = new FileStream(destFile); 
//woho, do what you want. 

File.Delete(destFile); 
+0

J'ai essayé l'enveloppe ImageMagick.NET. Il semble que cela pourrait résoudre mon problème, mais API est plutôt mal à l'aise et mal documenté. N'a pas encore essayé l'imagemagick externe parce que je préfère les solutions. NET, mais je garderai à l'esprit votre suggestion (si vous ne trouvez pas d'autre moyen). Merci! – barser

+0

Utilisez-vous imagemagick pour une tâche similaire à la mienne? Je veux dire pour envoyer png (ou jpeg) généré au client sans l'enregistrer sur le disque? Si oui, pourriez-vous me fournir un bref échantillon? – barser

+0

J'utilise imagick pour convertir pdf en tiff. Je n'utilise pas l'encapsuleur .Net, car cela rend les choses plus difficiles :) Surveillez les exemples pour l'outil à la place. Vous ne pouvez pas le faire sans enregistrer le fichier sur le disque (au moins pas avec imagick), il suffit de créer un fichier temporaire pour le processus et le supprimer une fois terminé) – jgauffin

1

Je pense que je l'ai trouvé! :) Atalasoft dotImage (édition gratuite) boost image montrant à environ 35ms ...