📄 transform.c
字号:
// for(mptr=matrix+1;mptr<matrix+BLOCKSIZE;mptr++)
// {
// *mptr = *mptr / acqfact;
// }
//#else
if (acqfact&1) /* Odd */
{
acqfact<<=1;
for(mptr=matrix+1;mptr<matrix+BLOCKSIZE;mptr++)
*mptr = *mptr / acqfact;
}
else
{
acqfact<<=1;
for(mptr=matrix+1;mptr<matrix+BLOCKSIZE;mptr++)
{
if (*mptr>0)
*mptr = (*mptr+1) / acqfact;
else
*mptr = (*mptr-1) / acqfact;
}
}
//#endif
}
/*BFUNC
ICCITTFlatQuantize_en() does an inverse flat quantize on the dc element
and an inverse thresholded quantize on the ac elements of the input
matrix.
EFUNC*/
//void ICCITTFlatQuantize_en(matrix,dcqfact,acqfact)
// int *matrix;
// int dcqfact;
// int acqfact;
void ICCITTFlatQuantize_en(int *matrix,int dcqfact,int acqfact)
{
BEGIN("ICCITTFlatQuantize_en");
int *mptr;
*matrix = *matrix*dcqfact;
//#ifdef VERSION_1_0
// acqfact++;
// for(mptr=matrix+1;mptr<matrix+BLOCKSIZE;mptr++)
// {
// if (*mptr>0)
// {
// *mptr = ((*mptr<<1) + 1)*acqfact;
// }
// else if (*mptr<0)
// {
// *mptr = ((*mptr<<1) - 1)*acqfact;
// }
// }
//#else
if (acqfact&1) /* Odd */
{
for(mptr=matrix+1;mptr<matrix+BLOCKSIZE;mptr++)
{
if (*mptr>0)
{
*mptr = ((*mptr<<1) + 1)*acqfact;
}
else if (*mptr<0)
{
*mptr = ((*mptr<<1) - 1)*acqfact;
}
}
}
else
{
for(mptr=matrix+1;mptr<matrix+BLOCKSIZE;mptr++)
{
if (*mptr>0)
{
*mptr = (((*mptr<<1) + 1)*acqfact)-1;
}
else if (*mptr<0)
{
*mptr = (((*mptr<<1) - 1)*acqfact)+1;
}
}
}
//#endif
}
/*BFUNC
ICCITTQuantize_en() does an inverse quantize on the dc element and the ac
element with their selective q values, respectively.
EFUNC*/
//void ICCITTQuantize_en(matrix,dcqfact,acqfact)
// int *matrix;
// int dcqfact;
// int acqfact;
void ICCITTQuantize_en(int *matrix,int dcqfact,int acqfact)
{
BEGIN("ICCITTQuantize_en");
int *mptr;
//#ifdef VERSION_1_0
// dcqfact++;
// acqfact++;
// if (*matrix>0) {*matrix = (2* *matrix + 1)*dcqfact;}
// else if (*matrix<0) {*matrix = (2* *matrix - 1)*dcqfact;}
// for(mptr=matrix+1;mptr<matrix+BLOCKSIZE;mptr++)
// {
// if (*mptr>0) {*mptr = (2* *mptr + 1)*acqfact;}
// else if (*mptr<0) {*mptr = (2* *mptr - 1)*acqfact;}
// }
//#else
if (dcqfact&1)
{
if (*matrix>0) {*matrix = ((*matrix<<1) + 1)*dcqfact;}
else if (*matrix<0) {*matrix = ((*matrix<<1) - 1)*dcqfact;}
}
else
{
if (*matrix>0) {*matrix = (((*matrix<<1) + 1)*dcqfact)-1;}
else if (*matrix<0) {*matrix = (((*matrix<<1) - 1)*dcqfact)+1;}
}
if (acqfact&1) /* Odd */
{
for(mptr=matrix+1;mptr<matrix+BLOCKSIZE;mptr++)
{
if (*mptr>0) {*mptr = ((*mptr<<1) + 1)*acqfact;}
else if (*mptr<0) {*mptr = ((*mptr<<1) - 1)*acqfact;}
}
}
else
{
for(mptr=matrix+1;mptr<matrix+BLOCKSIZE;mptr++)
{
if (*mptr>0) {*mptr = (((*mptr<<1) + 1)*acqfact)-1;}
else if (*mptr<0) {*mptr = (((*mptr<<1) - 1)*acqfact)+1;}
}
}
//#endif
}
/*BFUNC
BoundDctMatrix_en() clips the Dct matrix such that it is no larger than
a 10 bit word.
EFUNC*/
//void BoundDctMatrix_en(matrix)
// int *matrix;
void BoundDctMatrix_en(int *matrix)
{
BEGIN("BoundDctMatrix_en");
int *mptr;
if (*matrix > 2047)
{
*matrix = 2047;
}
for(mptr=matrix+1;mptr<matrix+BLOCKSIZE;mptr++)
{
if (*mptr < -1023)
{
*mptr = -1023;
}
else if (*mptr > 1023)
{
*mptr = 1023;
}
}
}
/*BFUNC
BoundIDctMatrix_en bounds the inverse dct matrix so that no pixel has a
value greater than 255 or less than 0.
EFUNC*/
//void BoundIDctMatrix_en(matrix)
// int *matrix;
void BoundIDctMatrix_en(int *matrix)
{
BEGIN("BoundIDctMatrix_en");
int *mptr;
for(mptr=matrix;mptr<matrix+BLOCKSIZE;mptr++)
{
if (*mptr < 0) {*mptr = 0;}
else if (*mptr > 255) {*mptr = 255;}
}
}
/*BFUNC
FlatBoundQuantizeMatrix_en() bounds a quantized matrix generated by
CCITTFlatQuantize_en().
EFUNC*/
//void FlatBoundQuantizeMatrix_en(matrix)
// int *matrix;
void FlatBoundQuantizeMatrix_en(int *matrix)
{
BEGIN("FlatBoundQuantizeMatrix_en");
int *mptr;
if (*matrix > 254) {*matrix = 254;}
else if (*matrix < 1) {*matrix = 1;}
for(mptr=matrix+1;mptr<matrix+BLOCKSIZE;mptr++)
{
if (*mptr < -127) {*mptr = -127;} /* Should this be a -127? */
else if (*mptr > 127) {*mptr = 127;}
}
}
/*BFUNC
BoundQuantizeMatrix_en() bounds a quantized matrix generated by
CCITTQuantize_en().
EFUNC*/
//
//void BoundQuantizeMatrix_en(matrix)
// int *matrix;
void BoundQuantizeMatrix_en(int *matrix)
{
BEGIN("BoundQuantizeMatrix_en");
int *mptr;
for(mptr=matrix;mptr<matrix+BLOCKSIZE;mptr++)
{
if (*mptr < -127)
{
*mptr = -127;
} /* Should this be a -127? */
else if (*mptr > 127)
{
*mptr = 127;
}
}
}
/*BFUNC
IZigzagMatrix_en() performs an inverse zig-zag translation on the
input imatrix and places the output in omatrix.
EFUNC*/
//void IZigzagMatrix_en(imatrix,omatrix)
// int *imatrix;
// int *omatrix;
void IZigzagMatrix_en(int *imatrix,int *omatrix)
{
BEGIN("IZigzagMatrix_en");
int *tptr;
for(tptr=zigzag_index;tptr<zigzag_index+BLOCKSIZE;tptr++)
{
*(omatrix) = imatrix[*tptr];
//fprintf(fp,"*(omatrix) = %d\timatrix[%d]=%d\n",*(omatrix),*tptr,imatrix[*tptr]);
omatrix++;
}
}
/*BFUNC
ZigzagMatrix_en() performs a zig-zag translation on the input imatrix
and puts the output in omatrix.
EFUNC*/
//void ZigzagMatrix_en(imatrix,omatrix)
// int *imatrix;
// int *omatrix;
void ZigzagMatrix_en(int *imatrix,int *omatrix)
{
BEGIN("ZigzagMatrix_en");
int *tptr;
for(tptr=zigzag_index;tptr<zigzag_index+BLOCKSIZE;tptr++)
{
omatrix[*tptr] = *(imatrix++);
}
}
/*BFUNC
PrintMatrix() prints an 8x8 matrix in row/column form.
EFUNC*/
//void PrintMatrix(matrix)
// int *matrix;
//void PrintMatrix(int *matrix)
//{
// BEGIN("PrintMatrix");
// int i,j;
//
// if (matrix)
// {
// for(i=0;i<BLOCKHEIGHT;i++)
// {
// for(j=0;j<BLOCKWIDTH;j++) {printf("%6d ",*(matrix++));}
// printf("\n");
// }
// }
// else {printf("Null\n");}
//}
//
/*BFUNC
ClearMatrix() sets all the elements of a matrix to be zero.
EFUNC*/
//void ClearMatrix(matrix)
// int *matrix;
//void ClearMatrix(int *matrix)
//{
// BEGIN("ClearMatrix");
// int *mptr;
//
// for(mptr=matrix;mptr<matrix+BLOCKSIZE;mptr++) {*mptr = 0;}
//}
/*END*/
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -