static void Main(string[] args) { // The library won't work without a license. You can get free time limited license // at https://bitmiracle.com/jpeg2000/ LicenseManager.SetTrialLicense("contact [email protected] for a license"); string fileName = @"Sample data/p1_04.j2k"; string tileFileName = @"tile"; using (var image = new J2kImage(fileName)) { var options = new J2kDecodingOptions { ForceRgbColorSpace = false }; foreach (int i in new int[] { 5, 25, 45 }) { var imageData = image.DecodeTile(i, options); string outputName = string.Format("{0}_{1}.tif", tileFileName, i); imageData.Save(outputName, J2kOutputFormat.Tiff); Process.Start(outputName); } } }
static void Main(string[] args) { // The library won't work without a license. You can get free time limited license // at https://bitmiracle.com/jpeg2000/ LicenseManager.SetTrialLicense("contact [email protected] for a license"); string fileName = @"Sample data/a2_colr.j2c"; string bitmapFileName = @"output.bmp"; string tiffFileName = @"output.tiff"; using (var image = new J2kImage(fileName)) { // there some decoding options that you can setup before you decode the image var options = new J2kDecodingOptions { UpsampleComponents = true }; var imageData = image.Decode(options); // decoded image data can be saved as BMP or TIFF file imageData.Save(bitmapFileName, J2kOutputFormat.Bmp); imageData.Save(tiffFileName, J2kOutputFormat.Tiff); } Process.Start(bitmapFileName); Process.Start(tiffFileName); }
static void Main(string[] args) { // The library won't work without a license. You can get free time limited license // at https://bitmiracle.com/jpeg2000/ LicenseManager.SetTrialLicense("contact [email protected] for a license"); const string OutputFileName = "output.tiff"; using (var image = new J2kImage(@"Sample data/map.jp2")) { using (Tiff outputTiff = Tiff.Open(OutputFileName, "w")) { // Tile size must be a multiple of 16. int tileWidth = roundUp(Math.Min(2000, image.Width / 5), 16); int tileHeight = roundUp(Math.Min(2000, image.Height / 5), 16); outputTiff.SetField(TiffTag.IMAGEWIDTH, image.Width); outputTiff.SetField(TiffTag.IMAGELENGTH, image.Height); outputTiff.SetField(TiffTag.ORIENTATION, Orientation.TOPLEFT); outputTiff.SetField(TiffTag.PLANARCONFIG, PlanarConfig.CONTIG); outputTiff.SetField(TiffTag.TILEWIDTH, tileWidth); outputTiff.SetField(TiffTag.TILELENGTH, tileHeight); int tileStripSize = 0; byte[] tileData = null; var options = new J2kDecodingOptions(); for (int y = 0; y < image.Height; y += tileHeight) { for (int x = 0; x < image.Width; x += tileWidth) { const string TileFileName = "tile.tiff"; var imageData = image.DecodeArea(x, y, tileWidth, tileHeight, options); imageData.Save(TileFileName, J2kOutputFormat.Tiff); using (var tileTiff = Tiff.Open(TileFileName, "r")) { if (x == 0 && y == 0) { int samplesPerPixel = tileTiff.GetField(TiffTag.SAMPLESPERPIXEL)[0].ToInt(); outputTiff.SetField(TiffTag.SAMPLESPERPIXEL, samplesPerPixel); int bitsPerSample = tileTiff.GetField(TiffTag.BITSPERSAMPLE)[0].ToInt(); outputTiff.SetField(TiffTag.BITSPERSAMPLE, bitsPerSample); int photometric = tileTiff.GetField(TiffTag.PHOTOMETRIC)[0].ToInt(); outputTiff.SetField(TiffTag.PHOTOMETRIC, photometric); tileStripSize = tileTiff.StripSize(); tileData = new byte[tileTiff.NumberOfStrips() * tileStripSize]; } int offset = 0; int stripCount = tileTiff.NumberOfStrips(); for (int i = 0; i < stripCount; ++i) { int bytesRead = tileTiff.ReadRawStrip(i, tileData, offset, tileData.Length - offset); offset += bytesRead; // pad the rightmost column of tiles if necessary offset += (tileStripSize - bytesRead); } outputTiff.WriteTile(tileData, x, y, 0, 0); } Console.WriteLine($"Processed tile {{{x}, {y}, {imageData.Width}, {imageData.Height}}}"); } } } } Process.Start(OutputFileName); }