/// <summary> /// スキャンデータを読み出す。 /// </summary> /// <returns>処理結果</returns> private ReturnID ReadScanData() { // スキャンデータを読み出す(実行関数)。 ReturnID returnID = DoReadScanData(out short[] qDctY); _qdctCoeffParam.YComponents = (ReturnID.Success == returnID ? (short[])qDctY.Clone() : null); return(returnID); }
/// <summary> /// スキャンデータを読み出す(実行関数)。 /// </summary> /// <param name="qDctY">輝度成分の量子化後のDCT係数列格納メモリ</param> /// <returns>処理結果</returns> private ReturnID DoReadScanData(out short[] qDctY) { qDctY = null; // 8x8ブロック数およびサンプリングレートの輝度/色差比率が正しく設定されていなければならない。 if (_qdctCoeffParam.BlockNumX <= 0 || _qdctCoeffParam.BlockNumX > short.MaxValue || _qdctCoeffParam.BlockNumY <= 0 || _qdctCoeffParam.BlockNumY > short.MaxValue || _hiYCR < 1 || _hiYCR > 2 || _viYCR < 1 || _viYCR > 2) { return(ReturnID.ErrorInternal); // 内部処理エラー } qDctY = new short[_qdctCoeffParam.BlockNumX * _qdctCoeffParam.BlockNumY * 64]; short[] preds = { 0, 0, 0 }; int sizeTemp = _qdctCoeffParam.BlockNumX << 6; List <int> qDctYIndexList = new List <int> { 0, (1 == _hiYCR ? sizeTemp : 64), sizeTemp, sizeTemp + 64 }; // 垂直方向のMCU単位で処理する。 for (int nMcuY = 0; nMcuY < _qdctCoeffParam.BlockNumY / _viYCR; nMcuY++) { // 水平方向のMCU単位で処理する。 for (int nMcuX = 0; nMcuX < _qdctCoeffParam.BlockNumX / _hiYCR; nMcuX++) { for (int component = 0; component < _components; component++) { // ハフマン復号テーブルセレクタはいずれも 0 または 1 でなければならない。 int nDcSel = _dcHDTSel[component]; int nAcSel = _acHDTSel[component]; if ((nDcSel & ~1) != 0 || (nAcSel & ~1) != 0) { return(ReturnID.ErrorInternal); // 内部処理エラー } if (0 == component) // 輝度成分 { // 1 MCUには輝度ブロックが複数含まれる。 for (int i = 0; i < _hiYCR * _viYCR; i++) { // ブロックデータを読み出す。 ReturnID returnID = ReadBlockData(ref qDctY, qDctYIndexList[i], ref preds[0], _dcHDT[nDcSel], _acHDT[nAcSel]); if (ReturnID.Success != returnID) { return(returnID); } qDctYIndexList[i] += _hiYCR << 6; } } else // 色差成分 { // ブロックデータを読み出す。 short[] qDctYTemp = null; ReturnID returnID = ReadBlockData(ref qDctYTemp, 0, ref preds[component], _dcHDT[nDcSel], _acHDT[nAcSel]); if (ReturnID.Success != returnID) { return(returnID); } } } } if (2 == _viYCR) { for (int i = 0; i < _hiYCR * _viYCR; i++) { qDctYIndexList[i] += sizeTemp; } } } if ((_remainBitLength & 7) != 0) { // 後続のビットを読み出す。これらはすべてビット1(fill bits)のはず。 // 注意:SjsReadBits 関数呼び出し中に _remainBitLength 値が変わってしまうので、 // 下記の様に nFillBitLen に代入しておく必要がある。 int nFillBitLen = _remainBitLength & 7; ushort wFillBits = ReadBits(nFillBitLen); } if (_remainSize < 2) { return(ReturnID.JpegDataErrorShortOfData); // JPEGデータ不足 } // 最後に、EOIマーカがあることを確認する。 while ((_remainSize >= 2) && ((byte)JpegMarkerCodes.MARKER_ID == _jpegData[_jpegDataIndex])) { // (マーカに先行するフィルバイトおよび)マーカの第一バイトを読み飛ばす。 while ((byte)JpegMarkerCodes.MARKER_ID == _jpegData[_jpegDataIndex]) { _jpegDataIndex++; _remainSize--; } if (--_remainSize < 0) { return(ReturnID.JpegDataErrorShortOfData); // JPEGデータ不足 } // EOIマーカがあれば、正常終了。 if ((byte)JpegMarkerCodes.EOI == _jpegData[_jpegDataIndex++]) { return(ReturnID.Success); } } return(ReturnID.JpegDataErrorNoEOIMarker); // JPEGデータの最後にEOIマーカがない }
internal void Execute_ReturnSaveChangesCommand(object parameter) { if (MainWindowViewModel.GetInstance(null, null).CurrentCartProducts.Count > 0) { //Record Transaction RecordReturn(); //Message MainWindowViewModel.GetInstance(null, null).Code = "¡Devolución Registrada!"; MainWindowViewModel.GetInstance(null, null).CodeColor = Constants.ColorCodeSave; MainWindowViewModel.GetInstance(null, null).ReturnID = Int32.Parse(ReturnID); MainWindowViewModel.GetInstance(null, null).ReturnTransaction = true; MainWindowViewModel.GetInstance(null, null).PaymentReceivedMXN = MainWindowViewModel.GetInstance(null, null).CalculateCurrentCartTotal(); //Log MainWindowViewModel.GetInstance(null, null).Log.Write(MainWindowViewModel.GetInstance(null, null).CurrentUser.Name, this.ToString() + " " + System.Reflection.MethodBase.GetCurrentMethod().Name, "Devolucion Registrada Folio: " + ReturnID.ToString()); MainWindowViewModel.GetInstance(null, null).CurrentPage = Constants.PaymentPage; } else { MainWindowViewModel.GetInstance(null, null).Code = "¡Agregar Artículos al Carrito!"; MainWindowViewModel.GetInstance(null, null).CodeColor = Constants.ColorCodeError; } }