📄 kltransdlg.cpp
字号:
GetDlgItem(IDC_FENLIANG6)->EnableWindow(true);
GetDlgItem(IDC_BROWSE16)->EnableWindow(true);
GetDlgItem(IDC_FENLIANG7)->EnableWindow(true);
GetDlgItem(IDC_BROWSE17)->EnableWindow(true);
GetDlgItem(IDC_CHECK1)->EnableWindow(false);
GetDlgItem(IDC_CHECK2)->EnableWindow(false);
GetDlgItem(IDC_CHECK3)->EnableWindow(false);
GetDlgItem(IDC_CHECK4)->EnableWindow(false);
GetDlgItem(IDC_CHECK5)->EnableWindow(false);
GetDlgItem(IDC_CHECK6)->EnableWindow(false);
GetDlgItem(IDC_CHECK7)->EnableWindow(false);
}
else if(m_bAll==true)
{
m_bAll=false;
for(int i=0;i<7;i++)
m_n[i]=0;
GetDlgItem(IDC_FENLIANG1)->EnableWindow(false);
GetDlgItem(IDC_BROWSE11)->EnableWindow(false);
GetDlgItem(IDC_FENLIANG2)->EnableWindow(false);
GetDlgItem(IDC_BROWSE12)->EnableWindow(false);
GetDlgItem(IDC_FENLIANG3)->EnableWindow(false);
GetDlgItem(IDC_BROWSE13)->EnableWindow(false);
GetDlgItem(IDC_FENLIANG4)->EnableWindow(false);
GetDlgItem(IDC_BROWSE14)->EnableWindow(false);
GetDlgItem(IDC_FENLIANG5)->EnableWindow(false);
GetDlgItem(IDC_BROWSE15)->EnableWindow(false);
GetDlgItem(IDC_FENLIANG6)->EnableWindow(false);
GetDlgItem(IDC_BROWSE16)->EnableWindow(false);
GetDlgItem(IDC_FENLIANG7)->EnableWindow(false);
GetDlgItem(IDC_BROWSE17)->EnableWindow(false);
GetDlgItem(IDC_CHECK1)->EnableWindow(true);
GetDlgItem(IDC_CHECK2)->EnableWindow(true);
GetDlgItem(IDC_CHECK3)->EnableWindow(true);
GetDlgItem(IDC_CHECK4)->EnableWindow(true);
GetDlgItem(IDC_CHECK5)->EnableWindow(true);
GetDlgItem(IDC_CHECK6)->EnableWindow(true);
GetDlgItem(IDC_CHECK7)->EnableWindow(true);
}
}
void CKLTransDlg::OnTransfile()
{
// TODO: Add your control notification handler code here
UpdateData(true);
DECLARE_HANDLE(HDIB);
HDIB hTM1,hTM2,hTM3,hTM4,hTM5,hTM7;
LPSTR pTM1,pTM2,pTM3,pTM4,pTM5,pTM7;
LPSTR pTM1Bits,pTM2Bits,pTM3Bits,pTM4Bits,pTM5Bits,pTM7Bits;
CFile fileTM1,fileTM2,fileTM3,fileTM4,fileTM5,fileTM7;
CFile fileFen1,fileFen2,fileFen3,fileFen4,fileFen5,fileFen6,fileFen7;
fileTM1.Open(m_strTM1,CFile::modeRead|CFile::shareDenyWrite,NULL);
fileTM2.Open(m_strTM2,CFile::modeRead|CFile::shareDenyWrite,NULL);
fileTM3.Open(m_strTM3,CFile::modeRead|CFile::shareDenyWrite,NULL);
fileTM4.Open(m_strTM4,CFile::modeRead|CFile::shareDenyWrite,NULL);
fileTM5.Open(m_strTM5,CFile::modeRead|CFile::shareDenyWrite,NULL);
fileTM7.Open(m_strTM7,CFile::modeRead|CFile::shareDenyWrite,NULL);
DWORD filesizeTM1,filesizeTM2,filesizeTM3,filesizeTM4,filesizeTM5,filesizeTM7;
filesizeTM1=fileTM1.GetLength();
filesizeTM2=fileTM2.GetLength();
filesizeTM3=fileTM3.GetLength();
filesizeTM4=fileTM4.GetLength();
filesizeTM5=fileTM5.GetLength();
filesizeTM7=fileTM7.GetLength();
hTM1=(HDIB)::GlobalAlloc(GMEM_MOVEABLE|GMEM_ZEROINIT,filesizeTM1);
hTM2=(HDIB)::GlobalAlloc(GMEM_MOVEABLE|GMEM_ZEROINIT,filesizeTM2);
hTM3=(HDIB)::GlobalAlloc(GMEM_MOVEABLE|GMEM_ZEROINIT,filesizeTM3);
hTM4=(HDIB)::GlobalAlloc(GMEM_MOVEABLE|GMEM_ZEROINIT,filesizeTM4);
hTM5=(HDIB)::GlobalAlloc(GMEM_MOVEABLE|GMEM_ZEROINIT,filesizeTM5);
hTM7=(HDIB)::GlobalAlloc(GMEM_MOVEABLE|GMEM_ZEROINIT,filesizeTM7);
if(hTM1==0||hTM2==0||hTM3==0||hTM4==0||hTM5==0||hTM7==0)
{
return ;
}
pTM1=(LPSTR)::GlobalLock((HGLOBAL)hTM1);
pTM1Bits=pTM1 + *(LPDWORD)pTM1
+ (WORD)(::DIBNumColors((LPBYTE)pTM1) * sizeof(RGBQUAD));
pTM2=(LPSTR)::GlobalLock((HGLOBAL)hTM2);
pTM2Bits=pTM2 + *(LPDWORD)pTM2
+ (WORD)(::DIBNumColors((LPBYTE)pTM2) * sizeof(RGBQUAD));
pTM3=(LPSTR)::GlobalLock((HGLOBAL)hTM3);
pTM3Bits=pTM3 + *(LPDWORD)pTM3
+ (WORD)(::DIBNumColors((LPBYTE)pTM3) * sizeof(RGBQUAD));
pTM4=(LPSTR)::GlobalLock((HGLOBAL)hTM4);
pTM4Bits=pTM4 + *(LPDWORD)pTM4
+ (WORD)(::DIBNumColors((LPBYTE)pTM4) * sizeof(RGBQUAD));
pTM5=(LPSTR)::GlobalLock((HGLOBAL)hTM5);
pTM5Bits=pTM5 + *(LPDWORD)pTM5
+ (WORD)(::DIBNumColors((LPBYTE)pTM5) * sizeof(RGBQUAD));
pTM7=(LPSTR)::GlobalLock((HGLOBAL)hTM7);
pTM7Bits=pTM7 + *(LPDWORD)pTM7
+ (WORD)(::DIBNumColors((LPBYTE)pTM7) * sizeof(RGBQUAD));
BITMAPFILEHEADER lpbmf1,lpbmf2,lpbmf3,lpbmf4,lpbmf5,lpbmf7;
fileTM1.Read(&lpbmf1,sizeof(BITMAPFILEHEADER));
fileTM2.Read(&lpbmf2,sizeof(BITMAPFILEHEADER));
fileTM3.Read(&lpbmf3,sizeof(BITMAPFILEHEADER));
fileTM4.Read(&lpbmf4,sizeof(BITMAPFILEHEADER));
fileTM5.Read(&lpbmf5,sizeof(BITMAPFILEHEADER));
fileTM7.Read(&lpbmf7,sizeof(BITMAPFILEHEADER));
DWORD dwBytes1=lpbmf1.bfSize-lpbmf1.bfOffBits;
DWORD dwBytes2=lpbmf2.bfSize-lpbmf2.bfOffBits;
DWORD dwBytes3=lpbmf3.bfSize-lpbmf3.bfOffBits;
DWORD dwBytes4=lpbmf4.bfSize-lpbmf4.bfOffBits;
DWORD dwBytes5=lpbmf5.bfSize-lpbmf5.bfOffBits;
DWORD dwBytes7=lpbmf7.bfSize-lpbmf7.bfOffBits;
fileTM1.ReadHuge(pTM1Bits,dwBytes1);
fileTM2.ReadHuge(pTM2Bits,dwBytes2);
fileTM3.ReadHuge(pTM3Bits,dwBytes3);
fileTM4.ReadHuge(pTM4Bits,dwBytes4);
fileTM5.ReadHuge(pTM5Bits,dwBytes5);
fileTM7.ReadHuge(pTM7Bits,dwBytes7);
BITMAPINFOHEADER lpbmi1,lpbmi2,lpbmi3,lpbmi4,lpbmi5,lpbmi7;
fileTM1.Seek(sizeof(BITMAPFILEHEADER),CFile::begin);
fileTM2.Seek(sizeof(BITMAPFILEHEADER),CFile::begin);
fileTM3.Seek(sizeof(BITMAPFILEHEADER),CFile::begin);
fileTM4.Seek(sizeof(BITMAPFILEHEADER),CFile::begin);
fileTM5.Seek(sizeof(BITMAPFILEHEADER),CFile::begin);
fileTM7.Seek(sizeof(BITMAPFILEHEADER),CFile::begin);
fileTM1.Read(&lpbmi1,sizeof(BITMAPINFOHEADER));
fileTM2.Read(&lpbmi2,sizeof(BITMAPINFOHEADER));
fileTM3.Read(&lpbmi3,sizeof(BITMAPINFOHEADER));
fileTM4.Read(&lpbmi4,sizeof(BITMAPINFOHEADER));
fileTM5.Read(&lpbmi5,sizeof(BITMAPINFOHEADER));
fileTM7.Read(&lpbmi7,sizeof(BITMAPINFOHEADER));
int widthTM1,heightTM1; int widthTM2,heightTM2; int widthTM3,heightTM3;
int widthTM4,heightTM4; int widthTM5,heightTM5; int widthTM7,heightTM7;
widthTM1=lpbmi1.biWidth;
widthTM2=lpbmi2.biWidth;
widthTM3=lpbmi3.biWidth;
widthTM4=lpbmi4.biWidth;
widthTM5=lpbmi5.biWidth;
widthTM7=lpbmi7.biWidth;
heightTM1=lpbmi1.biHeight;
heightTM2=lpbmi2.biHeight;
heightTM3=lpbmi3.biHeight;
heightTM4=lpbmi4.biHeight;
heightTM5=lpbmi5.biHeight;
heightTM7=lpbmi7.biHeight;
////////////////////////////////////////
if(heightTM1!=heightTM2||heightTM1!=heightTM3||heightTM1!=heightTM4
||heightTM1!=heightTM5||heightTM1!=heightTM7
||heightTM2!=heightTM3||heightTM2!=heightTM4||heightTM2!=heightTM5
||heightTM2!=heightTM7
||heightTM3!=heightTM4||heightTM3!=heightTM5||heightTM3!=heightTM7
||heightTM4!=heightTM5
||heightTM4!=heightTM7||heightTM5!=heightTM7||
widthTM1!=widthTM2||widthTM1!=widthTM3||widthTM1!=widthTM4
||widthTM1!=widthTM5||widthTM1!=widthTM7
||widthTM2!=widthTM3||widthTM2!=widthTM4||widthTM2!=widthTM5
||widthTM2!=widthTM7
||widthTM3!=widthTM4||widthTM3!=widthTM5||widthTM3!=widthTM7
||widthTM4!=widthTM5
||widthTM4!=widthTM7||widthTM5!=widthTM7)
{
AfxMessageBox("选择的TM影象不对!");
return;
}
//////////////////////////////////////////////////
LONG LineBytesTM;
LineBytesTM = WIDTHBYTES(widthTM1 * 24);
LONG OutLineBytes = WIDTHBYTES(widthTM1* 8);
///////////////////////////////////////
double averTM1,averTM2,averTM3,averTM4,averTM5,averTM7;
averTM1=getAver(heightTM1,widthTM1,pTM1Bits,LineBytesTM);
averTM2=getAver(heightTM2,widthTM2,pTM2Bits,LineBytesTM);
averTM3=getAver(heightTM3,widthTM3,pTM3Bits,LineBytesTM);
averTM4=getAver(heightTM4,widthTM4,pTM4Bits,LineBytesTM);
averTM5=getAver(heightTM5,widthTM5,pTM5Bits,LineBytesTM);
averTM7=getAver(heightTM7,widthTM7,pTM7Bits,LineBytesTM);
////////////////////////////////////////////
double varTM[6][6];
varTM[0][0]=getVar(averTM1,heightTM1,widthTM1,pTM1Bits,LineBytesTM);
varTM[1][1]=getVar(averTM2,heightTM2,widthTM2,pTM2Bits,LineBytesTM);
varTM[2][2]=getVar(averTM3,heightTM3,widthTM3,pTM3Bits,LineBytesTM);
varTM[3][3]=getVar(averTM4,heightTM4,widthTM4,pTM4Bits,LineBytesTM);
varTM[4][4]=getVar(averTM5,heightTM5,widthTM5,pTM5Bits,LineBytesTM);
varTM[5][5]=getVar(averTM7,heightTM7,widthTM7,pTM7Bits,LineBytesTM);
////////////////////////////////////////////////
varTM[0][1]=varTM[1][0]=getVari(averTM1,averTM2,pTM1Bits,pTM2Bits,
LineBytesTM,heightTM1,widthTM1);
varTM[0][2]=varTM[2][0]=getVari(averTM1,averTM3,pTM1Bits,pTM3Bits,
LineBytesTM,heightTM1,widthTM1);
varTM[0][3]=varTM[3][0]=getVari(averTM1,averTM4,pTM1Bits,pTM4Bits,
LineBytesTM,heightTM1,widthTM1);
varTM[0][4]=varTM[4][0]=getVari(averTM1,averTM5,pTM1Bits,pTM5Bits,
LineBytesTM,heightTM1,widthTM1);
varTM[0][5]=varTM[5][0]=getVari(averTM1,averTM7,pTM1Bits,pTM7Bits,
LineBytesTM,heightTM2,widthTM3);
varTM[1][2]=varTM[2][1]=getVari(averTM2,averTM3,pTM2Bits,pTM3Bits,
LineBytesTM,heightTM1,widthTM1);
varTM[1][3]=varTM[3][1]=getVari(averTM2,averTM4,pTM2Bits,pTM4Bits,
LineBytesTM,heightTM1,widthTM1);
varTM[1][4]=varTM[4][1]=getVari(averTM2,averTM5,pTM2Bits,pTM5Bits,
LineBytesTM,heightTM1,widthTM1);
varTM[1][5]=varTM[5][1]=getVari(averTM2,averTM7,pTM2Bits,pTM7Bits,
LineBytesTM,heightTM1,widthTM1);
varTM[2][3]=varTM[3][2]=getVari(averTM3,averTM4,pTM3Bits,pTM4Bits,
LineBytesTM,heightTM1,widthTM1);
varTM[2][4]=varTM[4][2]=getVari(averTM3,averTM5,pTM3Bits,pTM5Bits,
LineBytesTM,heightTM1,widthTM1);
varTM[2][5]=varTM[5][2]=getVari(averTM3,averTM7,pTM3Bits,pTM7Bits,
LineBytesTM,heightTM1,widthTM1);
varTM[3][4]=varTM[4][3]=getVari(averTM4,averTM5,pTM4Bits,pTM5Bits,
LineBytesTM,heightTM1,widthTM1);
varTM[3][5]=varTM[5][3]=getVari(averTM4,averTM7,pTM4Bits,pTM7Bits,
LineBytesTM,heightTM1,widthTM1);
varTM[4][5]=varTM[5][4]=getVari(averTM5,averTM7,pTM5Bits,pTM7Bits,
LineBytesTM,heightTM1,widthTM1);
/////////////////////////////////////////////////////////
double pArray[6];
pArray[0]=getShang(heightTM1,widthTM1,pTM1Bits,LineBytesTM);
pArray[1]=getShang(heightTM1,widthTM1,pTM2Bits,LineBytesTM);
pArray[2]=getShang(heightTM1,widthTM1,pTM3Bits,LineBytesTM);
pArray[3]=getShang(heightTM1,widthTM1,pTM4Bits,LineBytesTM);
pArray[4]=getShang(heightTM1,widthTM1,pTM5Bits,LineBytesTM);
pArray[5]=getShang(heightTM1,widthTM1,pTM7Bits,LineBytesTM);
int i,j,k,l=120;
int s;
double temp;
double a[6][6];//分别存放特征向量,特征值,次对角元素
double eps=0.0000001;
double mvarTM[6][6];
for(i=0;i<6;i++)
for(j=0;j<6;j++)
{
mvarTM[i][j]=varTM[i][j];
}
k=eejcb(varTM[0],6,a[0],eps,l);
if(k<=0)
{
AfxMessageBox("选择的TM影象不对!");
return ;
}
for(i=0;i<5;i++)
{
for(j=0;j<6-i-1;j++)
{
if(varTM[j][j]<varTM[j+1][j+1])
{
for(s=0;s<6;s++)
{
temp=a[s][j];
a[s][j]=a[s][j+1];
a[s][j+1]=temp;
}
temp=varTM[j][j];
varTM[j][j]=varTM[j+1][j+1];
varTM[j+1][j+1]=temp;
}
}
}
/* a[0][0]=0.0754;a[0][1]=-0.3186;a[0][2]=0.3929;a[0][3]=0.5901;a[0][4]=-0.2407;a[0][5]=-0.8140;
a[1][0]=0.0505;a[1][1]=-0.1886;a[1][2]=0.3212;a[1][3]=0.1527;a[1][4]=0.9377;a[1][5]=-0.0995;
a[2][0]=0.1132;a[2][1]=-0.6596;a[2][2]=0.5602;a[2][3]=-0.4110;a[2][4]=-0.2423;a[0][5]=0.4092;
a[3][0]=0.4919;a[3][1]=0.5760;a[3][2]=0.5006;a[3][3]=0.1848;a[3][4]=-0.0262;a[3][5]=0.0611;
a[4][0]=0.7754;a[4][1]=-0.0645;a[4][2]=-0.3776;a[4][3]=-0.3710;a[4][4]=-0.0085;a[4][5]=-0.1859;
a[5][0]=0.3684;a[5][1]=-0.3032;a[5][2]=-0.1882;a[5][3]=0.5365;a[5][4]=0.0571;a[5][5]=0.3489;
*/ if(m_n[0]==1)
{
fileFen1.Open(m_strFenliang1,
CFile::modeCreate|CFile::modeWrite|CFile::shareExclusive,NULL);
HDIB hTM11=(HDIB)::GlobalAlloc(GMEM_MOVEABLE|GMEM_ZEROINIT,fileFen1);
LPSTR pTM11=(LPSTR)::GlobalLock((HGLOBAL)hTM1);
BITMAPFILEHEADER bmfhdr;
BITMAPINFOHEADER bmphdr;
RGBQUAD rgb[256];
bmfhdr.bfType='MB';
bmfhdr.bfReserved1=0;
bmfhdr.bfReserved2=0;
bmphdr.biSize=40;
bmphdr.biWidth=widthTM1;
bmphdr.biHeight=heightTM1;
bmphdr.biPlanes=1;
bmphdr.biCompression=BI_RGB;
bmphdr.biXPelsPerMeter=0;
bmphdr.biYPelsPerMeter=0;
bmphdr.biClrUsed=0;
bmphdr.biClrImportant=0;
bmphdr.biBitCount=8;
bmfhdr.bfOffBits=1078;
bmphdr.biSizeImage=(int)((((widthTM1*8)+31)/32.0*4)*heightTM1);
bmfhdr.bfSize=bmfhdr.bfOffBits+bmphdr.biSizeImage;
for(int i=0;i<256;i++)
{
rgb[i].rgbBlue=i;
rgb[i].rgbGreen=i;
rgb[i].rgbRed=i;
rgb[i].rgbReserved=0;
}
fileFen1.Write(&bmfhdr,sizeof(bmfhdr));
fileFen1.Write(&bmphdr,sizeof(bmphdr));
fileFen1.Write(rgb,sizeof(RGBQUAD)*256);
long size;
size=widthTM1*heightTM1;
unsigned char *m_pBitsField;
m_pBitsField=(unsigned char*)malloc(size*sizeof(int));
// *m_pBitsField=(unsigned char)pTM11;
unsigned char * lpsr1,*lpsr2,*lpsr3,*lpsr4,*lpsr5,*lpsr6;
double temp;
// int iwb=bmphdr.biSizeImage/heightTM1;
for(i=0;i<heightTM1;i++)
{
for(j=0;j<widthTM1;j++)
{
lpsr1=(unsigned char*)(pTM1Bits+LineBytesTM*i+3*j);
lpsr2=(unsigned char*)(pTM2Bits+LineBytesTM*i+3*j);
lpsr3=(unsigned char*)(pTM3Bits+LineBytesTM*i+3*j);
lpsr4=(unsigned char*)(pTM4Bits+LineBytesTM*i+3*j);
lpsr5=(unsigned char*)(pTM5Bits+LineBytesTM*i+3*j);
lpsr6=(unsigned char*)(pTM7Bits+LineBytesTM*i+3*j);
temp=a[0][0]*(*lpsr1)+a[1][0]*(*lpsr2)+a[2][0]*(*lpsr3)
+a[3][0]*(*lpsr4)+a[4][0]*(*lpsr5)+a[5][0]*(*lpsr6);
*(m_pBitsField+OutLineBytes*i+j)=(int)(temp+0.5);
}
}
m_pBitsField+=14;
// int iWidthBytes=bmphdr.biSizeImage/heightTM1;
// int zero=0;
// DWORD dwOffBits=bmfhdr.bfOffBits;
// fileFen1.Seek(dwOffBits,CFile::begin);
/* for(i=0;i<heightTM1;i++)
{
fileFen1.Write(m_pBitsField+LineBytesTM*i,LineBytesTM);
if(widthTM1!=iWidthBytes)
{
for(j=0;j<iWidthBytes-widthTM1;j++)
fileFen1.Write(&zero,1);
}
}*/
fileFen1.Write(m_pBitsField,widthTM1*heightTM1);
}
if(m_n[1]==1)
{
fileFen2.Open(m_strFenliang2,
CFile::modeCreate|CFile::modeWrite|CFile::shareExclusive,NULL);
BITMAPFILEHEADER bmfhdr;
BITMAPINFOHEADER bmphdr;
RGBQUAD rgb[256];
bmfhdr.bfType='MB';
bmfhdr.bfReserved1=0;
bmfhdr.bfReserved2=0;
bmphdr.biSize=40;
bmphdr.biWidth=widthTM1;
bmphdr.biHeight=heightTM2;
bmphdr.biPlanes=1;
bmphdr.biCompression=BI_RGB;
bmphdr.biXPelsPerMeter=0;
bmphdr.biYPelsPerMeter=0;
bmphdr.biClrUsed=0;
bmphdr.biClrImportant=0;
bmphdr.biBitCount=8;
bmfhdr.bfOffBits=1078;
bmphdr.biSizeImage=(((widthTM1*8)+31)/32*4)*heightTM1;
bmfhdr.bfSize=bmfhdr.bfOffBits+bmphdr.biSizeImage;
for(int i=0;i<256;i++)
{
rgb[i].rgbBlue=i;
rgb[i].rgbGreen=i;
rgb[i].rgbRed=i;
rgb[i].rgbReserved=0;
}
fileFen2.Write(&bmfhdr,sizeof(bmfhdr));
fileFen2.Write(&bmphdr,sizeof(bmphdr));
fileFen2.Write(rgb,sizeof(RGBQUAD)*256);
long size;
unsigned char *m_pBitsField;
size=widthTM1*heightTM1;
m_pBitsField=(unsigned char*)malloc(size*sizeof(int));
unsigned char * lpsr1,*lpsr2,*lpsr3,*lpsr4,*lpsr5,*lpsr6;
double temp;
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -