- inputFileName
- System.String containing the name of the JPX file from which frames are to be extracted.
- outputFileName
- System.String containing the name of the fragmented JPX file.
- urls
- List of UuidUrl specifying the URLs where the fragments are contained.
- fragments
- List of Fragment specifying the following for each fragment:
- the codestream index to be fragmented
- the index for the URL which contains the fragment
- the offset of the first byte of the fragment within the specified URL
Visual Basic (Declaration) | |
---|---|
Public Sub FragmentJpxFile( _ ByVal inputFileName As String, _ ByVal outputFileName As String, _ ByVal urls As List(Of UuidUrl), _ ByVal fragments As List(Of Fragment) _ ) |
Visual Basic (Usage) | Copy Code |
---|---|
Dim instance As Jpeg2000Engine Dim inputFileName As String Dim outputFileName As String Dim urls As List(Of UuidUrl) Dim fragments As List(Of Fragment) instance.FragmentJpxFile(inputFileName, outputFileName, urls, fragments) |
C# | |
---|---|
public void FragmentJpxFile( string inputFileName, string outputFileName, List<UuidUrl> urls, List<Fragment> fragments ) |
C++/CLI | |
---|---|
public: void FragmentJpxFile( String^ inputFileName, String^ outputFileName, List<UuidUrl>^ urls, List<Fragment>^ fragments ) |
Parameters
- inputFileName
- System.String containing the name of the JPX file from which frames are to be extracted.
- outputFileName
- System.String containing the name of the fragmented JPX file.
- urls
- List of UuidUrl specifying the URLs where the fragments are contained.
- fragments
- List of Fragment specifying the following for each fragment:
- the codestream index to be fragmented
- the index for the URL which contains the fragment
- the offset of the first byte of the fragment within the specified URL
Visual Basic | Copy Code |
---|---|
Public Sub FragmentJpxFileExample() Dim engine As New Jpeg2000Engine() Dim fileInfo As Jpeg2000FileInformation = engine.GetFileInformation(Path.Combine(LEAD_VARS.ImagesDir, "image1.jpx")) If (1 > fileInfo.CodeStream.GetLength(0)) Then Return End If Dim frames As New List(Of Integer) frames.Add(0) Dim url As New UuidUrl() ReDim url.Flag(2) url.Flag(0) = 0 url.Flag(1) = 0 url.Flag(2) = 0 url.Version = 0 Dim loaction As String = Path.Combine(LEAD_VARS.ImagesDir, "codestream.bin") Dim data() As Byte = Encoding.ASCII.GetBytes(loaction) ReDim url.Location(data.GetLength(0)) data.CopyTo(url.Location, 0) Dim urls As New List(Of UuidUrl) urls.Add(url) Dim _fragment As New Fragment() _fragment.CodeStreamIndex = 0 _fragment.Offset = 0 _fragment.UrlIndex = 0 Dim fragments As New List(Of Fragment) fragments.Add(_fragment) engine.FragmentJpxFile(Path.Combine(LEAD_VARS.ImagesDir, "image1.jpx"), Path.Combine(LEAD_VARS.ImagesDir, "Test.jpx"), urls, fragments) End Sub Public NotInheritable Class LEAD_VARS Public Const ImagesDir As String = "C:\Users\Public\Documents\LEADTOOLS Images" End Class |
C# | Copy Code |
---|---|
public void FragmentJpxFileExample() { Jpeg2000Engine engine = new Jpeg2000Engine(); Jpeg2000FileInformation fileInfo = engine.GetFileInformation(Path.Combine(LEAD_VARS.ImagesDir, "image1.jpx")); if (1 > fileInfo.CodeStream.GetLength(0)) return; List<int> frames = new List<int>(); frames.Add(0); UuidUrl url = new UuidUrl(); url.Flag = new byte[3]; url.Flag[0] = 0; url.Flag[1] = 0; url.Flag[2] = 0; url.Version = 0; String loaction = Path.Combine(LEAD_VARS.ImagesDir, "codestream.bin"); byte[] data = Encoding.ASCII.GetBytes(loaction); url.Location = new byte[data.GetLength(0)]; data.CopyTo(url.Location, 0); List<UuidUrl> urls = new List<UuidUrl>(); urls.Add(url); Fragment fragment = new Fragment(); fragment.CodeStreamIndex = 0; fragment.Offset = 0; fragment.UrlIndex = 0; List<Fragment> fragments = new List<Fragment>(); fragments.Add(fragment); engine.FragmentJpxFile(Path.Combine(LEAD_VARS.ImagesDir, "image1.jpx"), Path.Combine(LEAD_VARS.ImagesDir, "Test.jpx"), urls, fragments); } static class LEAD_VARS { public const string ImagesDir = @"C:\Users\Public\Documents\LEADTOOLS Images"; } |
It is the user to save the fragmented codestreams in their URL locations.
Fragmentation in JPX works by specifying a table of pointers to the individual fragments. Each pointer specifies three things:
- The file which contains the fragment. Because multiple fragments across multiple codestreams may be stored in the same file, the format encapsulates all filename/URL data into a table (the Data Reference box). Each fragment specification then references an entry in the data reference table.
- The offset of the first byte of the fragment within the specified file. This offset is with respect to the first byte of the file (byte 0) and points directly to the first byte of codestream data for the fragment-- it does NOT point to the start of the box containing that fragment.
- The length of the fragment, in bytes.
Fragmentation is an important feature of the JPX file format since it allows applications to implement such features as:
- The capability to edit an image, resaving the changed tiles to the end of the file.
- The capability to distribute the image across several disks for faster access.
- The capability to distribute the image across the internet, allowing only certain customers access to the high quality or high resolution portions of the codestream.
- The capability to reuse the headers from within a codestream across multiple codestreams (to minimize file overhead when storing similar codestreams within the same JPX file).
Target Platforms: Microsoft .NET Framework 2.0, Windows 2000, Windows XP, Windows Server 2003 family, Windows Server 2008 family, Windows Vista, Windows 7
Reference
Jpeg2000Engine ClassJpeg2000Engine Members
AppendFrames(RasterCodecs,String,List<CompositeJpxImages>,Int32,Int32) Method
AppendGmlData
ExtractFrames
ExtractFramesMemory
ExtractFramesNativeMemory
ReadBox
ReadFrames
ReadGmlData
Compression Using LEAD and JPEG Formats
File Formats - JPEG And LEAD Compressed
Bitmaps In Memory And In Files
JPEG2000 File Comments
JPEG And LEAD File Comments
Programming with JPEG 2000 Features
JPEG 2000 Boxes