Frage

Gibt es eine gute Möglichkeit, RAW-Bilddateien (vor allem Canon CR2 und Adobe DNG-Dateien) als GDI + Bitmaps zu lesen, die einigermaßen schnell ist?

Ich fand ein Beispiel unter WPF ausgeführt wird, die ein Bild mit einem beliebigen installierten Bildcodec lesen würde und es dann in einer Bildsteuerung angezeigt werden soll. Und ich geändert, um dieses Beispiel einen GDI + Bitmap zu erstellen, indem Sie das WPF Bild zu einem Memorystream zu schreiben und die Bitmap aus, dass zu schaffen. Aber dieser Prozess ist langsam! Schrecklich langsam! ein einfaches Bild Öffnen dauert etwa 10 Sekunden auf meinem Computer. Diese Lösung erfordert auch Verweise auf die WPF-Baugruppen und das fühlt sich nicht richtig, vor allem nicht, da ich den Code in einem ASP.NET-Projekt ausgeführt werden soll.

Es gibt Programme, die Batch-Konvertierungen von den Bildern tun, aber ich würde es vorziehen, die Bilder dynamisch konvertieren, wenn angefordert.

Also, irgendwelche Vorschläge?

War es hilfreich?

Lösung

Disclaimer: Ich arbeite bei Atalasoft

.

DotImage Photo Pro Produkt kann dies tun. Wenn Sie versuchen, es selbst zu tun, schauen Sie in dem Open-Source-DCRaw Einwickeln oder schauen, wie Paint.NET tut es (ich glaube, es ist eine RAW-Plugin für sie)

Andere Tipps

Die DotImage Photo Pro Komponente funktionierte gut, aber ich hatte ein Problem das Vorschaubild von Raw-Dateien zu extrahieren es zu benutzen. Es ist auch für dieses Projekt außerhalb meines Budgets.

Aber, fand ich den Code für eine RAW-Plugin für Paint.NET hier und es war ganz einfach auf meine Bedürfnisse anzupassen. Das Plugin läuft die DCRaw ausführbare usign Process.Start und liest seinen Ausgang von dem StandardOutput Strom. Ganz einfach und schnell! :-)

Edit:

Der Link zum Plugin funktioniert nicht mehr, aber hier ist der Code, den ich die Bilder zu extrahieren verwendet. Der folgende Code extrahiert die jpg-Vorschau in der RAW-Datei gespeichert. Wenn Sie das vollständige Bild möchten, sollten Sie das Argument -e entfernen. Aber beachten Sie, dass für einige Kameras erhalten Sie ein ppm-Bild erhalten, wie GDI + kann nicht lesen.

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;
}

Außerdem müssen Sie eine Kopie von DCRaw. Ich benutzte die DcrawMS.exe von dieser Seite: http://www.insflug.org/raw/Downloads /

Hier ist ein C # Hafen von dcraw, wenn auch ziemlich alt (v8.88), die angepasst werden könnten, um neuere Canon-Modelle sind:
https://sourceforge.net/projects/dcrawnet/

EDIT:
Ich habe es für das Lesen von EXIF-Daten aus RAW-Dateien in meinem eigenen Projekt zu arbeiten:

  1. Öffnen Projekteigenschaften und stellen Sie Ausgabetyp Klassenbibliothek .
  2. Recompile.
  3. einen Verweis auf die DLL in Ihrem eigenen Projekt hinzufügen.
  4. Fügen Sie using dcraw; an der Spitze.
  5. deklariert diese Codezeilen:

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

Nun sehen Sie alle Goodies innerhalb von Staat (vorausgesetzt, Ihre RAW-Datei unterstützt wird und nicht eine Ausnahme verursachen;)

whoa. auf diese stolperte für mein Projekt .NET MVC. Kann tun RAW, und alles in der Welt, die Sie träumen können. Enthält Code, Beispiele und viele andere Programmiersprache Entscheidungen. Es sieht so gut, ich fühle mich wie vor immer etwas Geld spenden auch Sie es.

Google auf „imagemagck“, da eine Verbindung setzen wird nicht empfohlen. Es gibt sogar einen Wikipedia-Eintrag.

Ich hoffe, das jemand hilft.

Lizenziert unter: CC-BY-SA mit Zuschreibung
Nicht verbunden mit StackOverflow
scroll top