2009-02-26 12 views
18

Es scheint, dass .NET JP2 (JPEG 2000) Dateien mit der GDI-Bibliothek nicht öffnen kann. Ich habe auf Google gesucht, kann aber keine Bibliotheken oder Beispielcode finden, um dies zu tun.JPEG 2000-Unterstützung in C# .NET

Hat jemand irgendwelche Ideen? Ich möchte nicht wirklich für eine Bibliothek zu bezahlen, es zu tun, es sei denn, ich muss ..

Antwort

20

scheint, wie wir es FreeImage mit tun kann (das ist kostenlos)

FIBITMAP dib = FreeImage.LoadEx("test.jp2"); 
//save the image out to disk  
FreeImage.Save(FREE_IMAGE_FORMAT.FIF_JPEG, dib, "test.jpg", FREE_IMAGE_SAVE_FLAGS.JPEG_QUALITYNORMAL); 
//or even turn it into a normal Bitmap for later use 
Bitmap bitmap = FreeImage.GetBitmap(dib); 
+0

danke für die Führung von mir. +1 für deine Antwort. Aber nachdem ich jpeg200-Bilder auf meinem Fenster-Formular gerendert habe, erhalte ich eine Ausnahme wegen dib als Null. ** Eine Ausnahme wurde in der Render-Pipeline geworfen. ---> System.ArgumentNullException: Wert kann nicht null sein. Parametername: dib bei FreeImageAPI.FreeImage.GetBitmap (FIBITMAP dib, Boolean copyMetadata) bei FreeImageAPI.FreeImage.GetBitmap (FIBITMAP dib) **. Während des Debuggens, fand diese Methode ** statische FIBITMAP LoadEx (Zeichenkette Dateiname, FREE_IMAGE_LOAD_FLAGS Flags, ref FREE_IMAGE_FORMAT Format) ** gibt mir eine Struktur {0} zurück, die die obige Ausnahme verursacht. –

+1

Ich bekomme eine Modul nicht gefunden Ausnahme mit dem neuesten FreeImage Nugget-Paket – jjxtra

2

Vielleicht sollten Sie Check-out this Projekt.

+2

Dies beruht auf J #, die nicht in Visual Studio 2008 + – jjxtra

2

Ich suchte vor einiger Zeit nach etwas ähnlichem, um eines zu implementieren, wenn ich könnte; Die responses to my question bedeutet, dass es keine dokumentierte Methode gibt, dies für GDI + zu tun, die die Image-Klasse in .Net verwendet.

Ich glaube, dass, wenn Sie eine WPF-Anwendung zu schreiben, dann können Sie die Liste der unterstützten Bildformate durch Windows Imanging Components codecs erstrecken und dort man da draußen schon sein können (Ihre lokale Suchmaschine freundlich fragen?)

Es gibt eine Option, ein Addon wie DotImage zu verwenden, das JPEG2000 unterstützt, obwohl beim Laden von Bildern möglicherweise mehr Aufwand erforderlich ist.

2

Ich habe Leadtools verwendet, um JPEG 2000-Bilder anzuzeigen. Sie stellen eine .NET-Bibliothek mit WPF- und WinForms-Steuerelementen zum Anzeigen der Bilder bereit. Allerdings gibt es einen ziemlich hohen Preis.

1

Für alle über diesen alten Post kommen, der obige Code von Gordon funktioniert gut, aber wie jixtra darauf hingewiesen, werden Sie in der Tat erhalten eine Ausnahme: System.DllNotFoundException: 'DLL' FreeImage 'konnte nicht geladen werden: Das angegebene Modul konnte nicht gefunden werden.' bei der Installation über nuget. Ich konnte es in .net 4.6.1 arbeiten, indem ich das FreeImage-dotnet-core nugget-Paket installiere und die Datei FreeImage.dll manuell zum bin-Ordner hinzufüge. Sie können die DLL hier herunterladen: http://freeimage.sourceforge.net/download.html.

Ich brauchte eine bessere Bildqualität mit Tesseract zu verwenden, so machte ich ein paar kleineren Veränderungen, die einen großen Unterschied für die Qualität des neuen JPEG gemacht:

var jp2Format = FREE_IMAGE_FORMAT.FIF_JP2; 
var dib = FreeImage.LoadEx("test.jp2", ref jp2Format); 

FreeImage.SetResolutionX(dib, 300); 
FreeImage.SetResolutionY(dib, 300); 
FreeImage.Save(FREE_IMAGE_FORMAT.FIF_JPEG, dib, "test.jpg", FREE_IMAGE_SAVE_FLAGS.JPEG_QUALITYSUPERB);