public enum CodecsJpeg2000PrecinctSize
typedef NS_ENUM(NSInteger, LTCodecsJpeg2000PrecinctSize) {
LTCodecsJpeg2000PrecinctSizeFull = 0,
LTCodecsJpeg2000PrecinctSizeUniform64 = 1,
LTCodecsJpeg2000PrecinctSizeUniform128 = 2,
LTCodecsJpeg2000PrecinctSizeUniform256 = 3,
LTCodecsJpeg2000PrecinctSizeUniform512 = 4,
LTCodecsJpeg2000PrecinctSizeUniform1024 = 5,
LTCodecsJpeg2000PrecinctSizeUniform2048 = 6,
LTCodecsJpeg2000PrecinctSizeHierarchicalOne64 = 7,
LTCodecsJpeg2000PrecinctSizeHierarchicalOne128 = 8,
LTCodecsJpeg2000PrecinctSizeHierarchicalOne256 = 9,
LTCodecsJpeg2000PrecinctSizeHierarchicalOne512 = 10,
LTCodecsJpeg2000PrecinctSizeHierarchicalTwo64 = 11,
LTCodecsJpeg2000PrecinctSizeHierarchicalTwo128 = 12,
LTCodecsJpeg2000PrecinctSizeHierarchicalTwo256 = 13,
LTCodecsJpeg2000PrecinctSizeHierarchicalTwo512 = 14
};
public enum CodecsJpeg2000PrecinctSize
public enum class CodecsJpeg2000PrecinctSize
class CodecsJpeg2000PrecinctSize(Enum):
Full = 0
Uniform64 = 1
Uniform128 = 2
Uniform256 = 3
Uniform512 = 4
Uniform1024 = 5
Uniform2048 = 6
HierarchicalOne64 = 7
HierarchicalOne128 = 8
HierarchicalOne256 = 9
HierarchicalOne512 = 10
HierarchicalTwo64 = 11
HierarchicalTwo128 = 12
HierarchicalTwo256 = 13
HierarchicalTwo512 = 14
Value | Member | Description |
---|---|---|
0 | Full | No precinct is used, size is infinite. |
1 | Uniform64 | For all resolution levels, a precinct dimension of [64x64] will be applied. |
2 | Uniform128 | For all resolution levels, a precinct dimension of [128x128] will be applied. |
3 | Uniform256 | For all resolution levels, a precinct dimension of [256x256] will be applied. |
4 | Uniform512 | For all resolution levels, a precinct dimension of [512x512] will be applied. |
5 | Uniform1024 | For all resolution levels, a precinct dimension of [1024x1024] will be applied. |
6 | Uniform2048 | For all resolution levels, a precinct dimension of [2048x2048] will be applied. |
7 | HierarchicalOne64 | A precinct size of [X by X] will be applied to the first(smallest) resolution of the image. The second resolution precinct dimension would be [2X by 2X]. The third resolution precinct dimension would be [4X by 4X] and so on. If the JPEG 2000 file has five levels and HierarchicalOne64 is used, the precinct dimensions will be as follows:
|
8 | HierarchicalOne128 | A precinct size of [X by X] will be applied to the first(smallest) resolution of the image. The second resolution precinct dimension would be [2X by 2X]. The third resolution precinct dimension would be [4X by 4X] and so on. If the JPEG 2000 file has five levels and HierarchicalOne128 is used, the precinct dimensions will be as follows:
|
9 | HierarchicalOne256 | A precinct size of [X by X] will be applied to the first(smallest) resolution of the image. The second resolution precinct dimension would be [2X by 2X]. The third resolution precinct dimension would be [4X by 4X] and so on. If the JPEG 2000 file has five levels and HierarchicalOne256 is used, the precinct dimensions will be as follows:
|
10 | HierarchicalOne512 | A precinct size of [X by X] will be applied to the first(smallest) resolution of the image. The second resolution precinct dimension would be [2X by 2X]. The third resolution precinct dimension would be [4X by 4X] and so on. If the JPEG 2000 file has five levels and HierarchicalOne512 is used, the precinct dimensions will be as follows:
|
11 | HierarchicalTwo64 | A precinct size of [X by X] will be applied to the first and second (smallest) resolutions of the image. The third and fourth resolution precinct dimensions would be [2X by 2X] and so on. So if the JPEG 2000 file has five levels and HierarchicalTwo64 is used, the precinct dimensions will be as follows:
|
12 | HierarchicalTwo128 | A precinct size of [X by X] will be applied to the first and second (smallest) resolutions of the image. The third and fourth resolution precinct dimensions would be [2X by 2X] and so on. So if the JPEG 2000 file has five levels and HierarchicalTwo128 is used, the precinct dimensions will be as follows:
|
13 | HierarchicalTwo256 | A precinct size of [X by X] will be applied to the first and second (smallest) resolutions of the image. The third and fourth resolution precinct dimensions would be [2X by 2X] and so on. So if the JPEG 2000 file has five levels and HierarchicalTwo256 is used, the precinct dimensions will be as follows:
|
14 | HierarchicalTwo512 | A precinct size of [X by X] will be applied to the first and second (smallest) resolutions of the image. The third and fourth resolution precinct dimensions would be [2X by 2X] and so on. So if the JPEG 2000 file has five levels and HierarchicalTwo512 is used, the precinct dimensions will be as follows:
|
Precincts are rectangular regions in the wavelet domain, within a given resolution level and image component that represent a spatial region on the image. They are used for limiting the size of JPEG 2000 compressed packets and to provide a means of random access into a JPEG 2000 compressed stream. For this reason, they should be used for interactive transfer of JPEG 2000 files as in JPIP applications. In general, dividing the image into precincts is better than tiling it. So it is recommended that users compress the image as one tile and use precincts to divide the spatial region. This will give better compression ratios and image quality. Using smaller precinct dimensions provides finer access to the compressed stream yet increases the compressed stream size. It is recommended to use HierarchicalOne128 and no tiling to generate JPEG 2000 files for any purpose.
using Leadtools;
using Leadtools.Codecs;
using Leadtools.ImageProcessing.Core;
public void CodecsJpeg2000OptionsExample()
{
RasterCodecs codecs = new RasterCodecs();
string srcFileName = Path.Combine(LEAD_VARS.ImagesDir, "Image1.j2k");
CodecsJpeg2000PrecinctSize[] precintSizes = (CodecsJpeg2000PrecinctSize[])Enum.GetValues(typeof(CodecsJpeg2000PrecinctSize));
foreach (var precinctSize in precintSizes)
{
Console.WriteLine($"PrecinctSize types: {precinctSize}");
}
//Setting the Jpeg2000 load options. CodecsJpeg2000Options & CodecsJpeg2000LoadOptions reference
codecs.Options.Jpeg2000.Load.J2kResolution = new LeadSize(800, 800);
codecs.Options.Jpeg2000.Load.Jp2Resolution = new LeadSize(800, 800);
codecs.Options.Jpeg2000.Load.CmwResolution = new LeadSize(0, 0);
//loading a Jpeg2000 image.
RasterImage srcImage = codecs.Load(srcFileName);
//Setting the Jpeg2000 save options. CodecsJpeg2000SaveOptions reference
codecs.Options.Jpeg2000.Save.AlphaChannelActiveBits = 16;
codecs.Options.Jpeg2000.Save.AlphaChannelLossless = false;
codecs.Options.Jpeg2000.Save.CompressionControl = CodecsJpeg2000CompressionControl.Ratio;
codecs.Options.Jpeg2000.Save.CompressionRatio = 15.0f;
codecs.Options.Jpeg2000.Save.DecompositionLevels = 5;
codecs.Options.Jpeg2000.Save.DerivedQuantization = true;
codecs.Options.Jpeg2000.Save.ImageAreaHorizontalOffset = 0;
codecs.Options.Jpeg2000.Save.ImageAreaVerticalOffset = 0;
codecs.Options.Jpeg2000.Save.ProgressingOrder = CodecsJpeg2000ProgressionsOrder.PositionComponentResolutionLayer;
codecs.Options.Jpeg2000.Save.PrecinctSize = CodecsJpeg2000PrecinctSize.HierarchicalOne64;
codecs.Options.Jpeg2000.Save.ReferenceTileHeight = 240;
codecs.Options.Jpeg2000.Save.ReferenceTileWidth = 480;
codecs.Options.Jpeg2000.Save.RegionOfInterest = CodecsJpeg2000RegionOfInterest.UseLeadRegion;
codecs.Options.Jpeg2000.Save.RegionOfInterestRectangle = new LeadRect(0, 0, 0, 0);
codecs.Options.Jpeg2000.Save.TargetFileSize = 10240;
codecs.Options.Jpeg2000.Save.TileHorizontalOffset = 0;
codecs.Options.Jpeg2000.Save.TileVerticalOffset = 0;
codecs.Options.Jpeg2000.Save.UseColorTransform = true;
codecs.Options.Jpeg2000.Save.UseEphMarker = false;
codecs.Options.Jpeg2000.Save.UseRegionOfInterest = false;
codecs.Options.Jpeg2000.Save.UseSopMarker = false;
//Save the first sample.
codecs.Save(srcImage, Path.Combine(LEAD_VARS.ImagesDir, "Image1_test.j2k"), RasterImageFormat.J2k, srcImage.BitsPerPixel);
codecs.Options.Jpeg2000.Save.Reset();
//changing some of the Jpeg2000 save options
codecs.Options.Jpeg2000.Save.CompressionRatio = 23.0f;
codecs.Options.Jpeg2000.Save.DecompositionLevels = 6;
codecs.Options.Jpeg2000.Save.ReferenceTileHeight = 320;
codecs.Options.Jpeg2000.Save.ReferenceTileWidth = 320;
codecs.Options.Jpeg2000.Save.UseEphMarker = true;
codecs.Options.Jpeg2000.Save.ProgressingOrder = CodecsJpeg2000ProgressionsOrder.ResolutionPositionComponentLayer;
codecs.Options.Jpeg2000.Save.UseSopMarker = true;
codecs.Options.Jpeg2000.Save.TargetFileSize = 102400;
var maximumComponentsNumber = CodecsJpeg2000SaveOptions.MaximumComponentsNumber;
var maximumDecompressionLevels = CodecsJpeg2000SaveOptions.MaximumDecompressionLevels;
Console.WriteLine("MaximumComponents: {0}, MaximumDecompressionLevels: {1}", maximumComponentsNumber, maximumDecompressionLevels);
//Save the first sample.
codecs.Save(srcImage, Path.Combine(LEAD_VARS.ImagesDir, "Image1_test.jp2"), RasterImageFormat.J2k, srcImage.BitsPerPixel);
// Clean up
srcImage.Dispose();
codecs.Dispose();
}
static class LEAD_VARS
{
public const string ImagesDir = @"C:\LEADTOOLS22\Resources\Images";
}
Help Collections
Raster .NET | C API | C++ Class Library | HTML5 JavaScript
Document .NET | C API | C++ Class Library | HTML5 JavaScript
Medical .NET | C API | C++ Class Library | HTML5 JavaScript
Medical Web Viewer .NET
Multimedia
Direct Show .NET | C API | Filters
Media Foundation .NET | C API | Transforms
Supported Platforms
.NET, Java, Android, and iOS/macOS Assemblies
Imaging, Medical, and Document
C API/C++ Class Libraries
Imaging, Medical, and Document
HTML5 JavaScript Libraries
Imaging, Medical, and Document