📄 ratio.cpp
字号:
#include "stdafx.h"
#include "math.h"
double Calculate_SNR(CString SourceFileName,CString ObjectFileName)
{
long i,size;
double temp,error;
char msg[30];
CFile cSourceFile,cObjectFile;
BITMAPFILEHEADER bHead;
BITMAPINFOHEADER bi;
if(!cSourceFile.Open(SourceFileName,CFile::modeRead))
{
sprintf(msg,"The source file %s can't be opened!",SourceFileName);
AfxMessageBox(msg);
return -1;
}
if(!cObjectFile.Open(ObjectFileName,CFile::modeRead))
{
sprintf(msg,"The object file %s can't be opened!",ObjectFileName);
AfxMessageBox(msg);
return -1;
}
cSourceFile.Read(&bHead,sizeof(BITMAPFILEHEADER));
cSourceFile.Read(&bi,sizeof(BITMAPINFOHEADER));
cObjectFile.Seek(1078,CFile::begin);
cSourceFile.Seek(4*256,CFile::current);
unsigned char *SourceData,*ObjectData;
size=(bi.biWidth+3)/4*4*bi.biHeight;
SourceData=new unsigned char [size];
ObjectData=new unsigned char [size];
cSourceFile.ReadHuge(SourceData,size);
cObjectFile.ReadHuge(ObjectData,size);
for(i=0; i<size; i++)
{
temp=fabs(SourceData[i]-ObjectData[i]);
error+=temp*temp;
}
error/=(double)(bi.biWidth*bi.biHeight);
error=10*log10((double)255*255/error);
delete SourceData,ObjectData;
cSourceFile.Close();
cObjectFile.Close();
return error;
}
double Calculate_CompressRatio(CString SourceFileName,CString ObjectFileName)
{
char msg[30];
CFile cSourceFile,cObjectFile;
long SourceLength,ObjectLength;
double ratio;
if(!cSourceFile.Open(SourceFileName,CFile::modeRead))
{
sprintf(msg,"The source file %s can't be opened!",msg);
AfxMessageBox(msg);
return -1;
}
if(!cObjectFile.Open(ObjectFileName,CFile::modeRead))
{
sprintf(msg,"The object file %s can't be opened!",ObjectFileName);
AfxMessageBox(msg);
return -1;
}
ObjectLength=cObjectFile.GetLength();
SourceLength=cSourceFile.GetLength();
cSourceFile.Close();
cObjectFile.Close();
// ratio=(double)(SourceLength-1078)/ObjectLength;
ratio=(double)8.*ObjectLength/(640*640);
return ratio;
}
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -