コード例 #1
0
        private void DecodeProgressiveDataInterleaved(ref JpegReader reader, JpegScanHeader scanHeader, Span <JpegArithmeticDecodingComponent> components)
        {
            foreach (JpegArithmeticDecodingComponent component in components)
            {
                if (component.DcTable is null || component.DcStatistics is null)
                {
                    ThrowInvalidDataException();
                }
            }

            JpegBlockAllocator allocator = _allocator;
            JpegBitReader      bitReader = new JpegBitReader(reader.RemainingBytes);

            int mcusPerColumn = _mcusPerColumn;
            int mcusPerLine   = _mcusPerLine;

            for (int rowMcu = 0; rowMcu < mcusPerColumn; rowMcu++)
            {
                for (int colMcu = 0; colMcu < mcusPerLine; colMcu++)
                {
                    foreach (JpegArithmeticDecodingComponent component in components)
                    {
                        int index   = component.ComponentIndex;
                        int h       = component.HorizontalSamplingFactor;
                        int v       = component.VerticalSamplingFactor;
                        int offsetX = colMcu * h;
                        int offsetY = rowMcu * v;

                        for (int y = 0; y < v; y++)
                        {
                            int blockOffsetY = offsetY + y;
                            for (int x = 0; x < h; x++)
                            {
                                ref JpegBlock8x8 blockRef = ref allocator.GetBlockReference(index, offsetX + x, blockOffsetY);

                                ReadBlockProgressiveDC(ref bitReader, component, scanHeader, ref blockRef);
                            }
                        }
                    }

                    if (!HandleRestart(ref bitReader, ref reader, ref scanHeader, ref MemoryMarshal.GetReference(components), components.Length))
                    {
                        return;
                    }
                }
            }
コード例 #2
0
        private void DecodeProgressiveDataInterleaved(ref JpegReader reader, JpegScanHeader scanHeader, Span <JpegHuffmanDecodingComponent> components)
        {
            JpegBlockAllocator allocator = _allocator;
            JpegBitReader      bitReader = new JpegBitReader(reader.RemainingBytes);

            int mcusPerColumn = _mcusPerColumn;
            int mcusPerLine   = _mcusPerLine;

            for (int rowMcu = 0; rowMcu < mcusPerColumn; rowMcu++)
            {
                for (int colMcu = 0; colMcu < mcusPerLine; colMcu++)
                {
                    foreach (JpegHuffmanDecodingComponent component in components)
                    {
                        int index   = component.ComponentIndex;
                        int h       = component.HorizontalSamplingFactor;
                        int v       = component.VerticalSamplingFactor;
                        int offsetX = colMcu * h;
                        int offsetY = rowMcu * v;

                        for (int y = 0; y < v; y++)
                        {
                            int blockOffsetY = offsetY + y;
                            for (int x = 0; x < h; x++)
                            {
                                ref JpegBlock8x8 blockRef = ref allocator.GetBlockReference(index, offsetX + x, blockOffsetY);

                                ReadBlockProgressiveDC(ref bitReader, component, scanHeader, ref blockRef);
                            }
                        }
                    }

                    if (!HandleRestart(ref bitReader, ref reader))
                    {
                        return;
                    }
                }
            }
コード例 #3
0
 private void ReadBlock(ref JpegBitReader reader, JpegArithmeticDecodingComponent component, ref JpegBlock8x8 destinationBlock)
 {
     ref short destinationRef = ref Unsafe.As <JpegBlock8x8, short>(ref destinationBlock);
コード例 #4
0
 private static void ReadBlockBaseline(ref JpegBitReader reader, JpegHuffmanDecodingComponent component, ref JpegBlock8x8 destinationBlock)
 {
     ref short destinationRef = ref Unsafe.As <JpegBlock8x8, short>(ref destinationBlock);
コード例 #5
0
ファイル: JpegScanDecoder.cs プロジェクト: i-e-b/Form8sn
        protected static void DequantizeBlockAndUnZigZag(JpegQuantizationTable quantizationTable, ref JpegBlock8x8 input, ref JpegBlock8x8F output)
        {
            Debug.Assert(!quantizationTable.IsEmpty);

            ref ushort elementRef     = ref MemoryMarshal.GetReference(quantizationTable.Elements);