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 + -
显示快捷键?