private void ProcessComponentImpl( JpegDecoderCore decoder, int i, ref ComponentScan currentComponentScan, ref int totalHv, ref Component currentComponent) { // Section B.2.3 states that "the value of Cs_j shall be different from // the values of Cs_1 through Cs_(j-1)". Since we have previously // verified that a frame's component identifiers (C_i values in section // B.2.2) are unique, it suffices to check that the implicit indexes // into comp are unique. for (int j = 0; j < i; j++) { if (currentComponentScan.ComponentIndex == this.pointers.ComponentScan[j].ComponentIndex) { throw new ImageFormatException("Repeated component selector"); } } totalHv += currentComponent.HorizontalFactor * currentComponent.VerticalFactor; currentComponentScan.DcTableSelector = (byte)(decoder.Temp[2 + (2 * i)] >> 4); if (currentComponentScan.DcTableSelector > HuffmanTree.MaxTh) { throw new ImageFormatException("Bad DC table selector value"); } currentComponentScan.AcTableSelector = (byte)(decoder.Temp[2 + (2 * i)] & 0x0f); if (currentComponentScan.AcTableSelector > HuffmanTree.MaxTh) { throw new ImageFormatException("Bad AC table selector value"); } }
private void InitComponentScan(JpegDecoderCore decoder, int i, ref ComponentScan currentComponentScan, ref int totalHv) { // Component selector. int cs = decoder.Temp[1 + (2 * i)]; int compIndex = -1; for (int j = 0; j < decoder.ComponentCount; j++) { // Component compv = ; if (cs == decoder.ComponentArray[j].Identifier) { compIndex = j; } } if (compIndex < 0) { throw new ImageFormatException("Unknown component selector"); } currentComponentScan.ComponentIndex = (byte)compIndex; this.ProcessComponentImpl(decoder, i, ref currentComponentScan, ref totalHv, ref decoder.ComponentArray[compIndex]); }