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

📄 dct.h

📁 实现jpeg的压缩编码功能 在demo2的工程文件中即可查看
💻 H
字号:
#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 + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -