Obsługa formatu obrazu JPEG2000

Omówienie

HotPDF zapewnia teraz kompleksową obsługę formatów obrazów JPEG2000, w tym plików JP2, J2K i JPT. JPEG2000 to oparty na falkach standard kompresji obrazu, który zapewnia wyższą skuteczność kompresji i jakość niż tradycyjny format JPEG

Obsługiwane formaty

  • JP2: format JPEG2000 Part 1 z pełną strukturą pliku
  • J2K: format strumienia kodowego JPEG2000 (surowe dane skompresowane)

Najważniejsze funkcje

  • Automatyczne wykrywanie formatu i odpowiednie przetwarzanie
  • Obsługa kompresji bezstratnej i stratnej
  • Obsługa obrazów wieloskładnikowych (RGB, RGBA, skala szarości)
  • Zaawansowana obsługa głębi bitowej (8, 12, 16 bitów na komponent)
  • Możliwości dekodowania progresywnego
  • Oszczędne użycie pamięci przy przetwarzaniu dużych obrazów
  • Budżety wyjścia dekodowania dla wrogich albo nieoczekiwanie dużych codestreamów
  • Automatyczny wybór rozdzielczości renderera na podstawie widocznych pikseli docelowych
  • Ograniczona równoległa rekonstrukcja niezależnych, przecinających się kafli
  • Deterministyczne składanie, anulowanie, limit workerów i telemetria szczytowej pamięci

Przykład użycia


// Przykład Delphi - dodawanie obrazu JPEG2000 do PDF
procedure AddJPEG2000Image;
var
  PDF: THotPDF;
begin
  PDF := THotPDF.Create(nil);
  try
    PDF.FileName := 'output.pdf';
    PDF.BeginDoc;
    PDF.AddPage;

    // Dodaj obraz JPEG2000 - format jest wykrywany automatycznie
    PDF.AddImage('sample.jp2', 100, 100, 200, 150);

    // Obsługiwany jest także format strumienia kodowego J2K
    PDF.AddImage('sample.j2k', 100, 300, 200, 150);

    PDF.EndDoc;
  finally
    PDF.Free;
  end;
end;
        

Implementacja techniczna

Obsługa JPEG2000 jest zaimplementowana w module HPDFJpeg2000.pas, który udostępnia:

  • THPDFJpeg2000Decoder: główna klasa dekodera do przetwarzania obrazów JPEG2000
  • Wykrywanie formatu: automatyczna identyfikacja formatów JP2, J2K i JPT
  • Inspekcja nagłówka: InspectHeaderFromByteArray czyta wymiary, komponenty i SourceColorSpace bez dekodowania próbek pikseli
  • Przetwarzanie strumieni: obsługa ładowania obrazów z plików i strumieni
  • Dostęp do kafli: LoadTileFromByteArray dekoduje jeden zwalidowany kafl i raportuje jego offset źródłowy oraz siatkę
  • Wybór rozdzielczości: LoadRegionFromByteArray łączy prostokąt źródłowy z współczynnikiem redukcji falkowej
  • Równoległe dekodowanie kafli: LoadRegionFromByteArrayParallel używa niezależnych instancji dekodera i deterministycznego składania wiersz-główny
  • Załadowane PDF-y: DecodeLoadedImageRegionAtResolution wybiera poziom, który nie niedorozwiązuje żadnego z docelowych wymiarów
  • Sterowanie operacjami: JPEG2000ParallelTileDecoding i JPEG2000TileWorkerLimit sterują integracją z rendererem, a GetLastJPEG2000ParallelDecodeStats raportuje szeregowanie i szacunki budżetu
  • Integracja OpenJPEG: warstwa do zaawansowanego przetwarzania z użyciem biblioteki OpenJPEG

Korzyści wydajnościowe

  • Lepsze współczynniki kompresji niż w tradycyjnym JPEG
  • Brak artefaktów blokowych przy wysokich poziomach kompresji
  • Progresywne przesyłanie i wyświetlanie
  • Obsługa kodowania regionu zainteresowania (ROI)
  • Opcja kompresji bezstratnej
  • Współbieżna rekonstrukcja, gdy widoczny obszar przecina niezależne tile'e codestreamu

Zgodność

Obsługa JPEG2000 jest dostępna w 32-bitowych i 64-bitowych wersjach HotPDF oraz jest zgodna ze wszystkimi obsługiwanymi wersjami Delphi i C++ Builder

Zobacz też