⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 predict.c

📁 dicom file 查看工具 DICOM文件是医疗设备使用的文件格式。
💻 C
字号:
/* * predict.c -- *  * Code for predictor calculation. Its macro version, predictor.h, * is used in non-debugging compilation. *//* * $Id: predict.c,v 1.1 2002/10/14 21:56:03 enlf Exp $ */#include <stdio.h>#include "mcu.h"#ifdef DEBUG/* *-------------------------------------------------------------- * * Predict -- * *      Calculate the predictor for pixel[row][col][curComp], *      i.e. curRowBuf[col][curComp]. It handles the all special  *      cases at image edges, such as first row and first column *      of a scan. * * Results: *      predictor is passed out. * * Side effects: *      None. * *-------------------------------------------------------------- */voidPredict(int row,int col,  /* position of the pixel to be predicted */        int curComp,      /* the pixel's component that is predicting */        MCU *curRowBuf,MCU *prevRowBuf, /* current and previous row of image */        int Pr,          /* data precision */        int Pt,          /* point transformation */        int psv,         /* predictor selection value */        int *predictor)  /* preditor value (output) */{    register int left,upper,diag,leftcol;    leftcol=col-1;    if (row==0) {             /*         * The predictor of first pixel is (1<<(Pr-Pt-1), and the        * predictors for rest of first row are left neighbors.         */       if (col==0) {          *predictor = (1<<(Pr-Pt-1));       }       else {          *predictor = curRowBuf[leftcol][curComp];       }    }    else {       /*        * The predictors of first column are upper neighbors.         * All other preditors are calculated according to psv.         */       upper=prevRowBuf[col][curComp];       if (col==0)          *predictor = upper;       else {          left=curRowBuf[leftcol][curComp];          diag=prevRowBuf[leftcol][curComp];          switch (psv) {             case 0:                     *predictor = 0;                     break;             case 1:                     *predictor = left;                     break;             case 2:                     *predictor = upper;                     break;             case 3:                     *predictor = diag;                     break;             case 4:                     *predictor = left+upper-diag;                     break;             case 5:                     *predictor = left+((upper-diag)>>1);                     break;             case 6:                     *predictor = upper+((left-diag)>>1);                     break;             case 7:                     *predictor = (left+upper)>>1;                     break;             default:                     fprintf(stderr,"Warning: Undefined PSV\n");                     *predictor = 0;           }        }      }}/* *-------------------------------------------------------------- * * QuickPredict -- * *      Calculate the predictor for sample curRowBuf[col][curComp]. *      It does not handle the special cases at image edges, such  *      as first row and first column of a scan. We put the special  *      case checkings outside so that the computations in main *      loop can be simpler. This has enhenced the performance *      significantly. * * Results: *      predictor is passed out. * * Side effects: *      None. * *-------------------------------------------------------------- */voidQuickPredict(int col   /* column # of the pixel to be predicted */,         int curComp   /* the pixel's component that is predicting */,         MCU *curRowBuf,MCU *prevRowBuf,/* current and previous row of image */         int psv       /* predictor selection value */,         int predictor /* preditor value (output) */){    register int left,upper,diag,leftcol;    /*      * All predictor are calculated according to psv.     */     switch (psv) {      case 0:              *predictor = 0;              break;      case 1:              leftcol = col-1;              left    = curRowBuf[leftcol][curComp];              *predictor = left;              break;      case 2:              upper = prevRowBuf[col][curComp];              *predictor = upper;              break;      case 3:              leftcol = col-1;              diag    = prevRowBuf[leftcol][curComp];              *predictor = diag;              break;      case 4:              leftcol = col-1;              upper   = prevRowBuf[col][curComp];              left    = curRowBuf[leftcol][curComp];              diag    = prevRowBuf[leftcol][curComp];              *predictor = left + upper - diag;              break;      case 5:              leftcol = col-1;              upper   = prevRowBuf[col][curComp];              left    = curRowBuf[leftcol][curComp];              diag    = prevRowBuf[leftcol][curComp];              *predictor = left+((upper-diag)>>1);              break;      case 6:              leftcol = col-1;              upper   = prevRowBuf[col][curComp];              left    = curRowBuf[leftcol][curComp];              diag    = prevRowBuf[leftcol][curComp];              *predictor = upper+((left-diag)>>1);              break;      case 7:              leftcol = col-1;              upper   = prevRowBuf[col][curComp];              left    = curRowBuf[leftcol][curComp];              *predictor = (left+upper)>>1;              break;      default:              fprintf(stderr,"Warning: Undefined PSV\n");              *predictor = 0;     }}#endif /*DEBUG*/

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -