# CSJ2K.j2k.quantization.dequantizer.Dequantizer

## Content

<div class="doc-site-dotnet-api-container">



  <h1 id="CSJ2K_j2k_quantization_dequantizer_Dequantizer" data-uid="CSJ2K.j2k.quantization.dequantizer.Dequantizer" class="text-break">Dequantizer Class
</h1>
  <div class="markdown level0 summary"><p>This is the abstract class from which all dequantizers must inherit. This
class has the concept of a current tile and all operations are performed on
the current tile.</p>
<pre><code>       &lt;p&gt;This class provides default implemenations for most of the methods
       (wherever it makes sense), under the assumption that the image and
       component dimensions, and the tiles, are not modifed by the dequantizer. If
       that is not the case for a particular implementation then the methods
       should be overriden.&lt;/p&gt;

       &lt;p&gt;Sign magnitude representation is used (instead of two's complement) for
       the input data. The most significant bit is used for the sign (0 if
       positive, 1 if negative). Then the magnitude of the quantized coefficient
       is stored in the next most significat bits. The most significant magnitude
       bit corresponds to the most significant bit-plane and so on.&lt;/p&gt;

       &lt;p&gt;The output data is either in floating-point, or in fixed-point two's
       complement. In case of floating-point data the the value returned by
       getFixedPoint() must be 0. If the case of fixed-point data the number of
       fractional bits must be defined at the constructor of the implementing
       class and all operations must be performed accordingly. Each component may
       have a different number of fractional bits.&lt;/p&gt;
</code></pre>
</div>
  <div class="markdown level0 conceptual"></div>
  <div class="inheritance">
    <h5>Inheritance</h5>
    <div class="level0"><a class="xref" href="https://learn.microsoft.com/dotnet/api/system.object">object</a></div>
    <div class="level1"><a class="xref" href="CSJ2K.j2k.wavelet.synthesis.MultiResImgDataAdapter.html">MultiResImgDataAdapter</a></div>
    <div class="level2"><span class="xref">Dequantizer</span></div>
      <div class="level3"><a class="xref" href="CSJ2K.j2k.quantization.dequantizer.StdDequantizer.html">StdDequantizer</a></div>
  </div>
  <div class="implements">
    <h5>Implements</h5>
    <div><a class="xref" href="CSJ2K.j2k.wavelet.synthesis.CBlkWTDataSrcDec.html">CBlkWTDataSrcDec</a></div>
    <div><a class="xref" href="CSJ2K.j2k.wavelet.synthesis.InvWTData.html">InvWTData</a></div>
    <div><a class="xref" href="CSJ2K.j2k.wavelet.synthesis.MultiResImgData.html">MultiResImgData</a></div>
  </div>
  <h6><strong>Namespace</strong>: <a class="xref" href="CSJ2K.j2k.quantization.dequantizer.html">CSJ2K.j2k.quantization.dequantizer</a></h6>
  <h6><strong>Assembly</strong>: C1.C1Pdf.4.8.dll</h6>
  <h5 id="CSJ2K_j2k_quantization_dequantizer_Dequantizer_syntax">Syntax</h5>
  <div class="codewrapper">
    <pre><code class="lang-csharp hljs">public abstract class Dequantizer : MultiResImgDataAdapter, CBlkWTDataSrcDec, InvWTData, MultiResImgData</code></pre>
  </div>
  <div class="codewrapper">
    <pre><code class="lang-vbnet hljs">Public MustInherit Class Dequantizer
    Inherits MultiResImgDataAdapter
    Implements CBlkWTDataSrcDec, InvWTData, MultiResImgData</code></pre>
  </div>
  <h3 id="constructors">Constructors
</h3>
  <table class="table table-bordered table-condensed">
    <thead>
      <tr>
        <th>Name</th>
        <th>Description</th>
      </tr>
    </thead>
    <tbody>
      <tr>
        <td id="CSJ2K_j2k_quantization_dequantizer_Dequantizer__ctor_CSJ2K_j2k_quantization_dequantizer_CBlkQuantDataSrcDec_System_Int32___CSJ2K_j2k_decoder_DecoderSpecs_" data-uid="CSJ2K.j2k.quantization.dequantizer.Dequantizer.#ctor(CSJ2K.j2k.quantization.dequantizer.CBlkQuantDataSrcDec,System.Int32[],CSJ2K.j2k.decoder.DecoderSpecs)">
          <a class="xref" href="CSJ2K.j2k.quantization.dequantizer.Dequantizer.-ctor.html#CSJ2K_j2k_quantization_dequantizer_Dequantizer__ctor_CSJ2K_j2k_quantization_dequantizer_CBlkQuantDataSrcDec_System_Int32___CSJ2K_j2k_decoder_DecoderSpecs_">Dequantizer(CBlkQuantDataSrcDec, int[], DecoderSpecs)</a>
        </td>
        <td class="markdown level1 summary"><p>Initializes the source of compressed data.</p>
</td>
      </tr>
    </tbody>
  </table>
  <h3 id="fields">Fields
</h3>
  <table class="table table-bordered table-condensed">
    <thead>
      <tr>
        <th>Name</th>
        <th>Description</th>
      </tr>
    </thead>
    <tbody>
      <tr>
        <td id="CSJ2K_j2k_quantization_dequantizer_Dequantizer_OPT_PREFIX" data-uid="CSJ2K.j2k.quantization.dequantizer.Dequantizer.OPT_PREFIX">
          <a class="xref" href="CSJ2K.j2k.quantization.dequantizer.Dequantizer.OPT_PREFIX.html">OPT_PREFIX</a>
        </td>
        <td class="markdown level1 summary"><p>The prefix for dequantizer options: 'Q'</p>
</td>
      </tr>
      <tr>
        <td id="CSJ2K_j2k_quantization_dequantizer_Dequantizer_rb" data-uid="CSJ2K.j2k.quantization.dequantizer.Dequantizer.rb">
          <a class="xref" href="CSJ2K.j2k.quantization.dequantizer.Dequantizer.rb.html">rb</a>
        </td>
        <td class="markdown level1 summary"><p>The &quot;range bits&quot; for each transformed component</p>
</td>
      </tr>
      <tr>
        <td id="CSJ2K_j2k_quantization_dequantizer_Dequantizer_src" data-uid="CSJ2K.j2k.quantization.dequantizer.Dequantizer.src">
          <a class="xref" href="CSJ2K.j2k.quantization.dequantizer.Dequantizer.src.html">src</a>
        </td>
        <td class="markdown level1 summary"><p>The entropy decoder from where to get the quantized data (the
source).</p>
</td>
      </tr>
      <tr>
        <td id="CSJ2K_j2k_quantization_dequantizer_Dequantizer_utrb" data-uid="CSJ2K.j2k.quantization.dequantizer.Dequantizer.utrb">
          <a class="xref" href="CSJ2K.j2k.quantization.dequantizer.Dequantizer.utrb.html">utrb</a>
        </td>
        <td class="markdown level1 summary"><p>The &quot;range bits&quot; for each un-transformed component</p>
</td>
      </tr>
    </tbody>
  </table>
  <h3 id="properties">Properties
</h3>
  <table class="table table-bordered table-condensed">
    <thead>
      <tr>
        <th>Name</th>
        <th>Description</th>
      </tr>
    </thead>
    <tbody>
      <tr>
        <td id="CSJ2K_j2k_quantization_dequantizer_Dequantizer_CbULX" data-uid="CSJ2K.j2k.quantization.dequantizer.Dequantizer.CbULX">
          <a class="xref" href="CSJ2K.j2k.quantization.dequantizer.Dequantizer.CbULX.html#CSJ2K_j2k_quantization_dequantizer_Dequantizer_CbULX">CbULX</a>
        </td>
        <td class="markdown level1 summary"><p>Returns the horizontal code-block partition origin. Allowable values
are 0 and 1, nothing else.</p>
</td>
      </tr>
      <tr>
        <td id="CSJ2K_j2k_quantization_dequantizer_Dequantizer_CbULY" data-uid="CSJ2K.j2k.quantization.dequantizer.Dequantizer.CbULY">
          <a class="xref" href="CSJ2K.j2k.quantization.dequantizer.Dequantizer.CbULY.html#CSJ2K_j2k_quantization_dequantizer_Dequantizer_CbULY">CbULY</a>
        </td>
        <td class="markdown level1 summary"><p>Returns the vertical code-block partition origin. Allowable values are
0 and 1, nothing else.</p>
</td>
      </tr>
      <tr>
        <td id="CSJ2K_j2k_quantization_dequantizer_Dequantizer_ParameterInfo" data-uid="CSJ2K.j2k.quantization.dequantizer.Dequantizer.ParameterInfo">
          <a class="xref" href="CSJ2K.j2k.quantization.dequantizer.Dequantizer.ParameterInfo.html#CSJ2K_j2k_quantization_dequantizer_Dequantizer_ParameterInfo">ParameterInfo</a>
        </td>
        <td class="markdown level1 summary"><p>Returns the parameters that are used in this class and
implementing classes. It returns a 2D String array. Each of the
1D arrays is for a different option, and they have 3
elements. The first element is the option name, the second one
is the synopsis and the third one is a long description of what
the parameter is. The synopsis or description may be 'null', in
which case it is assumed that there is no synopsis or
description of the option, respectively. Null may be returned
if no options are supported.</p>
</td>
      </tr>
    </tbody>
  </table>
  <h3 id="methods">Methods
</h3>
  <table class="table table-bordered table-condensed">
    <thead>
      <tr>
        <th>Name</th>
        <th>Description</th>
      </tr>
    </thead>
    <tbody>
      <tr>
        <td id="CSJ2K_j2k_quantization_dequantizer_Dequantizer_getCodeBlock_System_Int32_System_Int32_System_Int32_CSJ2K_j2k_wavelet_synthesis_SubbandSyn_CSJ2K_j2k_image_DataBlk_" data-uid="CSJ2K.j2k.quantization.dequantizer.Dequantizer.getCodeBlock(System.Int32,System.Int32,System.Int32,CSJ2K.j2k.wavelet.synthesis.SubbandSyn,CSJ2K.j2k.image.DataBlk)">
          <a class="xref" href="CSJ2K.j2k.quantization.dequantizer.Dequantizer.getCodeBlock.html#CSJ2K_j2k_quantization_dequantizer_Dequantizer_getCodeBlock_System_Int32_System_Int32_System_Int32_CSJ2K_j2k_wavelet_synthesis_SubbandSyn_CSJ2K_j2k_image_DataBlk_">getCodeBlock(int, int, int, SubbandSyn, DataBlk)</a>
        </td>
        <td class="markdown level1 summary"><p>Returns the specified code-block in the current tile for the specified
component, as a copy (see below).</p>
<pre><code>       &lt;p&gt;The returned code-block may be progressive, which is indicated by
       the 'progressive' variable of the returned 'DataBlk' object. If a
       code-block is progressive it means that in a later request to this
       method for the same code-block it is possible to retrieve data which is
       a better approximation, since meanwhile more data to decode for the
       code-block could have been received. If the code-block is not
       progressive then later calls to this method for the same code-block
       will return the exact same data values.&lt;/p&gt;

       &lt;p&gt;The data returned by this method is always a copy of the internal
       data of this object, if any, and it can be modified &quot;in place&quot; without
       any problems after being returned. The 'offset' of the returned data is 
       0, and the 'scanw' is the same as the code-block width. See the
       'DataBlk' class.&lt;/p&gt;
</code></pre>
</td>
      </tr>
      <tr>
        <td id="CSJ2K_j2k_quantization_dequantizer_Dequantizer_getFixedPoint_System_Int32_" data-uid="CSJ2K.j2k.quantization.dequantizer.Dequantizer.getFixedPoint(System.Int32)">
          <a class="xref" href="CSJ2K.j2k.quantization.dequantizer.Dequantizer.getFixedPoint.html#CSJ2K_j2k_quantization_dequantizer_Dequantizer_getFixedPoint_System_Int32_">getFixedPoint(int)</a>
        </td>
        <td class="markdown level1 summary"><p>Returns the position of the fixed point in the specified component, or
equivalently the number of fractional bits. This is the position of the
least significant integral (i.e. non-fractional) bit, which is
equivalent to the number of fractional bits. For instance, for
fixed-point values with 2 fractional bits, 2 is returned. For
floating-point data this value does not apply and 0 should be
returned. Position 0 is the position of the least significant bit in
the data.</p>
</td>
      </tr>
      <tr>
        <td id="CSJ2K_j2k_quantization_dequantizer_Dequantizer_getInternCodeBlock_System_Int32_System_Int32_System_Int32_CSJ2K_j2k_wavelet_synthesis_SubbandSyn_CSJ2K_j2k_image_DataBlk_" data-uid="CSJ2K.j2k.quantization.dequantizer.Dequantizer.getInternCodeBlock(System.Int32,System.Int32,System.Int32,CSJ2K.j2k.wavelet.synthesis.SubbandSyn,CSJ2K.j2k.image.DataBlk)">
          <a class="xref" href="CSJ2K.j2k.quantization.dequantizer.Dequantizer.getInternCodeBlock.html#CSJ2K_j2k_quantization_dequantizer_Dequantizer_getInternCodeBlock_System_Int32_System_Int32_System_Int32_CSJ2K_j2k_wavelet_synthesis_SubbandSyn_CSJ2K_j2k_image_DataBlk_">getInternCodeBlock(int, int, int, SubbandSyn, DataBlk)</a>
        </td>
        <td class="markdown level1 summary"><p>Returns the specified code-block in the current tile for the specified
component (as a reference or copy).</p>
<pre><code>       &lt;p&gt;The returned code-block may be progressive, which is indicated by
       the 'progressive' variable of the returned 'DataBlk' object. If a
       code-block is progressive it means that in a later request to this
       method for the same code-block it is possible to retrieve data which is
       a better approximation, since meanwhile more data to decode for the
       code-block could have been received. If the code-block is not
       progressive then later calls to this method for the same code-block
       will return the exact same data values.&lt;/p&gt;

       &lt;p&gt;The data returned by this method can be the data in the internal
       buffer of this object, if any, and thus can not be modified by the
       caller. The 'offset' and 'scanw' of the returned data can be
       arbitrary. See the 'DataBlk' class.&lt;/p&gt;
</code></pre>
</td>
      </tr>
      <tr>
        <td id="CSJ2K_j2k_quantization_dequantizer_Dequantizer_getNomRangeBits_System_Int32_" data-uid="CSJ2K.j2k.quantization.dequantizer.Dequantizer.getNomRangeBits(System.Int32)">
          <a class="xref" href="CSJ2K.j2k.quantization.dequantizer.Dequantizer.getNomRangeBits.html#CSJ2K_j2k_quantization_dequantizer_Dequantizer_getNomRangeBits_System_Int32_">getNomRangeBits(int)</a>
        </td>
        <td class="markdown level1 summary"></td>
      </tr>
      <tr>
        <td id="CSJ2K_j2k_quantization_dequantizer_Dequantizer_getSynSubbandTree_System_Int32_System_Int32_" data-uid="CSJ2K.j2k.quantization.dequantizer.Dequantizer.getSynSubbandTree(System.Int32,System.Int32)">
          <a class="xref" href="CSJ2K.j2k.quantization.dequantizer.Dequantizer.getSynSubbandTree.html#CSJ2K_j2k_quantization_dequantizer_Dequantizer_getSynSubbandTree_System_Int32_System_Int32_">getSynSubbandTree(int, int)</a>
        </td>
        <td class="markdown level1 summary"><p>Returns the specified synthesis subband tree</p>
</td>
      </tr>
      <tr>
        <td id="CSJ2K_j2k_quantization_dequantizer_Dequantizer_nextTile" data-uid="CSJ2K.j2k.quantization.dequantizer.Dequantizer.nextTile">
          <a class="xref" href="CSJ2K.j2k.quantization.dequantizer.Dequantizer.nextTile.html#CSJ2K_j2k_quantization_dequantizer_Dequantizer_nextTile">nextTile()</a>
        </td>
        <td class="markdown level1 summary"><p>Advances to the next tile, in standard scan-line order (by rows then
columns). An NoNextElementException is thrown if the current tile is
the last one (i.e. there is no next tile).</p>
<pre><code>       &lt;p&gt;This default implementation just changes the tile in the source.&lt;/p&gt;
</code></pre>
</td>
      </tr>
      <tr>
        <td id="CSJ2K_j2k_quantization_dequantizer_Dequantizer_setTile_System_Int32_System_Int32_" data-uid="CSJ2K.j2k.quantization.dequantizer.Dequantizer.setTile(System.Int32,System.Int32)">
          <a class="xref" href="CSJ2K.j2k.quantization.dequantizer.Dequantizer.setTile.html#CSJ2K_j2k_quantization_dequantizer_Dequantizer_setTile_System_Int32_System_Int32_">setTile(int, int)</a>
        </td>
        <td class="markdown level1 summary"><p>Changes the current tile, given the new indexes. An
IllegalArgumentException is thrown if the indexes do not correspond to
a valid tile.</p>
<pre><code>       &lt;p&gt;This default implementation just changes the tile in the source.&lt;/p&gt;
</code></pre>
</td>
      </tr>
    </tbody>
  </table>

</div>
