dct.h
来自「实现jpeg的压缩编码功能 在demo2的工程文件中即可查看」· C头文件 代码 · 共 53 行
H
53 行
#ifndef DCT_H
#define DCT_H
#include "memory.h"
#include <cmath>
using namespace std;
const double PI=3.1415926;
template<typename T>
void dct(T* data,T* dctdata,int length)
{
memset(dctdata,0,sizeof(T)*length);
T a1=sqrt(1/(T)length);
T a2=sqrt(2/(T)length);
for (int j=0;j<length;j++)
{
for(int i=0;i<length;i++)
{
dctdata[j]+=data[i]*cos(((2*i+1)*j*PI)/(2*length));
}
j==0?dctdata[j]=dctdata[j]*a1:dctdata[j]=dctdata[j]*a2;
}
}
template<typename T>
void dct2(T* data,T* dctdata,int R,int C)
{
memset(dctdata,0,sizeof(T)*R*C);
T* temp_row=new T[C];
T* temp_colmn0=new T[R];
T* temp_colmn=new T[R];
//对每一行做变换
for (int i=0;i<R;i++)
{
dct(data+i*C,temp_row,C);
memcpy(data+i*C,temp_row,sizeof(T)*C);
}
for (int j=0;j<C;j++)
{
for (i=0;i<R;i++)
temp_colmn0[i]=*(data+i*C+j);
dct(temp_colmn0,temp_colmn,C);
for (i=0;i<R;i++)
*(dctdata+i*C+j)=temp_colmn[i];
}
delete []temp_row;
delete []temp_colmn0;
delete []temp_colmn;
}
#endif
⌨️ 快捷键说明
复制代码Ctrl + C
搜索代码Ctrl + F
全屏模式F11
增大字号Ctrl + =
减小字号Ctrl + -
显示快捷键?