コード例 #1
0
        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);
                }
            }
        }
コード例 #2
0
        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);
        }
コード例 #3
0
        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);
        }