CSJ2K.j2k.codestream.writer.HeaderEncoder.encodeMainHeader C# (CSharp) Method

encodeMainHeader() public method

Write main header. JJ2000 main header corresponds to the following sequence of marker segments:
  1. SOC
  2. SIZ
  3. COD
  4. COC (if needed)
  5. QCD
  6. QCC (if needed)
  7. POC (if needed)
public encodeMainHeader ( ) : void
return void
        public virtual void encodeMainHeader()
        {
            int i;

            // +---------------------------------+
            // |    SOC marker segment           |
            // +---------------------------------+
            writeSOC();

            // +---------------------------------+
            // |    Image and tile SIZe (SIZ)    |
            // +---------------------------------+
            writeSIZ();

            // +-------------------------------+
            // |   COding style Default (COD)  |
            // +-------------------------------+
            bool isEresUsed = ((System.String) encSpec.tts.getDefault()).Equals("predict");
            writeCOD(true, 0);

            // +---------------------------------+
            // |   COding style Component (COC)  |
            // +---------------------------------+
            for (i = 0; i < nComp; i++)
            {
                bool isEresUsedinComp = ((System.String) encSpec.tts.getCompDef(i)).Equals("predict");
                if (encSpec.wfs.isCompSpecified(i) || encSpec.dls.isCompSpecified(i) || encSpec.bms.isCompSpecified(i) || encSpec.mqrs.isCompSpecified(i) || encSpec.rts.isCompSpecified(i) || encSpec.sss.isCompSpecified(i) || encSpec.css.isCompSpecified(i) || encSpec.pss.isCompSpecified(i) || encSpec.cblks.isCompSpecified(i) || (isEresUsed != isEresUsedinComp))
                // Some component non-default stuff => need COC
                    writeCOC(true, 0, i);
            }

            // +-------------------------------+
            // |   Quantization Default (QCD)  |
            // +-------------------------------+
            writeMainQCD();

            // +-------------------------------+
            // | Quantization Component (QCC)  |
            // +-------------------------------+
            // Write needed QCC markers
            for (i = 0; i < nComp; i++)
            {
                if (dwt.getNomRangeBits(i) != defimgn || encSpec.qts.isCompSpecified(i) || encSpec.qsss.isCompSpecified(i) || encSpec.dls.isCompSpecified(i) || encSpec.gbs.isCompSpecified(i))
                {
                    writeMainQCC(i);
                }
            }

            // +--------------------------+
            // |    POC maker segment     |
            // +--------------------------+
            Progression[] prog = (Progression[]) (encSpec.pocs.getDefault());
            if (prog.Length > 1)
                writePOC(true, 0);

            // +---------------------------+
            // |      Comments (COM)       |
            // +---------------------------+
            writeCOM();
        }

Usage Example

コード例 #1
0
ファイル: J2KEncoder.cs プロジェクト: KSLcom/Aurora-LibOMV
        public static byte[] EncodeJPEG(Image jpgImage)
        {
            Tiler imgtiler;
            ForwCompTransf fctransf;
            ImgDataConverter converter;
            EncoderSpecs encSpec;
            ForwardWT dwt;
            Quantizer quant;
            ROIScaler rois;
            EntropyCoder ecoder;
            PostCompRateAllocator ralloc;
            HeaderEncoder headenc;
            CodestreamWriter bwriter;

            float rate = Single.MaxValue;

            ImgReaderGDI imgsrc = new ImgReaderGDI(jpgImage);

            imgtiler = new Tiler(imgsrc, 0, 0, 0, 0, jpgImage.Width, jpgImage.Height);
            int ntiles = imgtiler.getNumTiles();

            encSpec = new EncoderSpecs(ntiles, 3, imgsrc, pl);

            fctransf = new ForwCompTransf(imgtiler, encSpec);
            converter = new ImgDataConverter(fctransf);
            dwt = ForwardWT.createInstance(converter, pl, encSpec);
            quant = Quantizer.createInstance(dwt, encSpec);
            rois = ROIScaler.createInstance(quant, pl, encSpec);
            ecoder = EntropyCoder.createInstance(rois, pl, encSpec.cblks,
                encSpec.pss, encSpec.bms,
                encSpec.mqrs, encSpec.rts,
                encSpec.css, encSpec.sss,
                encSpec.lcs, encSpec.tts);

            using (MemoryStream stream = new MemoryStream())
            {
                bwriter = new FileCodestreamWriter(stream, Int32.MaxValue);
                ralloc = PostCompRateAllocator.createInstance(ecoder, pl, rate, bwriter, encSpec);

                headenc = new HeaderEncoder(imgsrc, new bool[3], dwt, imgtiler, encSpec, rois, ralloc, pl);
                ralloc.HeaderEncoder = headenc;
                headenc.encodeMainHeader();
                ralloc.initialize();
                headenc.reset();
                headenc.encodeMainHeader();
                bwriter.commitBitstreamHeader(headenc);

                ralloc.runAndWrite();
                bwriter.close();

                return stream.ToArray();
            }
        }
All Usage Examples Of CSJ2K.j2k.codestream.writer.HeaderEncoder::encodeMainHeader