Question

Existe-t-il un bon moyen de lire les fichiers image RAW (en particulier les fichiers Canon CR2 et Adobe DNG) sous forme de bitmaps GDI + raisonnablement rapides?

J'ai trouvé un exemple fonctionnant sous WPF qui lisait une image à l'aide d'un codec d'image installé, puis l'affichait dans un contrôle d'image. Et j'ai modifié cet exemple pour créer un bitmap GDI + en écrivant l'image WPF sur un MemoryStream et en créant le bitmap à partir de celui-ci. Mais ce processus est lent! Horriblement lent! L’ouverture d’une image simple prend environ 10 secondes sur mon ordinateur. Cette solution nécessite également des références aux assemblys WPF et cela ne semble pas aller, surtout que je voudrais exécuter le code dans un projet ASP.NET.

Il existe des programmes qui effectuent des conversions par lots des images, mais je préférerais convertir les images de manière dynamique lorsque cela est demandé.

Alors, des suggestions?

Était-ce utile?

La solution

Avertissement: je travaille chez Atalasoft.

Notre produit DotImage Photo Pro peut le faire. Si vous voulez essayer de le faire vous-même, examinez comment encapsuler le DCRaw opensource ou regardez comment Paint.NET le fait (je pense qu’il existe un plug-in RAW pour cela)

Autres conseils

Le composant DotImage Photo Pro a bien fonctionné, mais un problème d’extraction de l’image de prévisualisation à partir de fichiers raw l’utilisant. C'est également en dehors de mon budget pour ce projet.

Mais j’ai trouvé le code d’un plug-in RAW pour Paint.NET ici et il était assez simple de s'adapter à mes besoins. Le plug-in exécute l'exécutable DCRaw usign Process.Start et lit sa sortie dans le flux StandardOutput . Assez simple et rapide! :-)

Modifier:

Le lien vers le plugin ne fonctionne plus, mais voici le code que j'ai utilisé pour extraire les images. Le code suivant extrait l'aperçu jpg stocké dans le fichier brut. Si vous voulez l'image complète, supprimez l'argument -e. Mais sachez que pour certains appareils photo, vous obtiendrez une image ppm que GDI + ne peut pas lire.

public Stream GetImageData(string inputFile, string dcRawExe)
{


    var startInfo = new ProcessStartInfo(dcRawExe)
    {
        Arguments = "-c -e \"" + inputFile + "\"",
        RedirectStandardOutput = true,
        UseShellExecute = false
    };

    var process = Process.Start(startInfo);

    var image = Image.FromStream(process.StandardOutput.BaseStream);

    var memoryStream = new MemoryStream();
    image.Save(memoryStream, ImageFormat.Png);

    return memoryStream;
}

De plus, vous aurez besoin d’une copie de DCRaw. J'ai utilisé le fichier DcrawMS.exe de ce site: http://www.insflug.org/raw/Downloads /

Voici un portage en C # de dcraw, bien qu'assez ancien (v8.88), qui pourrait être adapté pour inclure les modèles Canon les plus récents:
https://sourceforge.net/projects/dcrawnet/

MODIFIER:
Je viens de le faire fonctionner dans mon propre projet de lecture de données EXIF ??à partir de fichiers RAW:

  1. Ouvrez les propriétés du projet et définissez le type de sortie sur Bibliothèque de classes .
  2. Recompiler.
  3. Ajoutez une référence à la DLL dans votre propre projet.
  4. Ajoutez à l'aide de dcraw; en haut.
  5. Déclarez ces lignes de code:

    DcRawState state = new DcRawState();
    state.inFilename = filename;
    state.ifp = new RawStream(filename);
    
    
    Identifier id = new Identifier(state);
    id.identify(state.ifp);
    

Recherchez maintenant tous les avantages dans state (en supposant que votre fichier RAW soit pris en charge et ne provoque aucune exception;)

whoa. Je suis juste tombé sur cela pour mon projet .NET MVC. Peut faire du RAW, plus tout ce dont vous pouvez rêver au monde. Inclut du code, des exemples et de nombreux choix de langages de programmation. C'est tellement beau que j'ai envie de donner de l'argent avant même de l'utiliser.

Google sur "imagemagck" car mettre un lien n'est pas recommandé. Il y a même une entrée sur Wikipedia.

J'espère que cela aide quelqu'un.

Licencié sous: CC-BY-SA avec attribution
Non affilié à StackOverflow
scroll top