📄 imagedisview.cpp
字号:
//获得8临域
//处理G1分量
x0=2*column+2;
y0=2*row+1;
G=m_ptrData[y0*m_nColumnNum+x0];//G
x=x0-1;
y=y0-1;
c1=m_ptrData[y*m_nColumnNum+x];//B
x=x0-1;
y=y0;
c2=m_ptrData[y*m_nColumnNum+x];//G
x=x0-1;
y=y0+1;
c3=m_ptrData[y*m_nColumnNum+x];//R
x=x0;
y=y0-1;
c4=m_ptrData[y*m_nColumnNum+x];//R
x=x0;
y=y0+1;
c5=m_ptrData[y*m_nColumnNum+x];//R
x=x0+1;
y=y0-1;
c6=m_ptrData[y*m_nColumnNum+x];//G
x=x0+1;
y=y0;
c7=m_ptrData[y*m_nColumnNum+x];//B
x=x0+1;
y=y0+1;
c8=m_ptrData[y*m_nColumnNum+x];//G
R=(c3+c4+c5)/3;
G=(G+c2+c6+c8)/3;
B=(c1+c7)/2;
m_ptrInteData[y0*nBytesPerRow+3*x0+0]=B;
m_ptrInteData[y0*nBytesPerRow+3*x0+1]=G;
m_ptrInteData[y0*nBytesPerRow+3*x0+2]=R;
}
for(row=0;row<rowEge;row++)
for(column=0;column<columnEge;column++)
{
//获得8临域
//处理G2分量
x0=2*column+1;
y0=2*row+2;
G=m_ptrData[y0*m_nColumnNum+x0];//G
x=x0-1;
y=y0-1;
c1=m_ptrData[y*m_nColumnNum+x];//G
x=x0-1;
y=y0;
c2=m_ptrData[y*m_nColumnNum+x];//R
x=x0-1;
y=y0+1;
c3=m_ptrData[y*m_nColumnNum+x];//G
x=x0;
y=y0-1;
c4=m_ptrData[y*m_nColumnNum+x];//B
x=x0;
y=y0+1;
c5=m_ptrData[y*m_nColumnNum+x];//B
x=x0+1;
y=y0-1;
c6=m_ptrData[y*m_nColumnNum+x];//G
x=x0+1;
y=y0;
c7=m_ptrData[y*m_nColumnNum+x];//R
x=x0+1;
y=y0+1;
c8=m_ptrData[y*m_nColumnNum+x];//G
R=(c2+c7)/2;
G=(G+c1+c3+c6+c8)/5;
B=(c4+c5)/2;
m_ptrInteData[y0*nBytesPerRow+3*x0+0]=B;
m_ptrInteData[y0*nBytesPerRow+3*x0+1]=G;
m_ptrInteData[y0*nBytesPerRow+3*x0+2]=R;
}
for(row=0;row<rowEge;row++)
for(column=0;column<columnEge;column++)
{
//获得8临域
//处理R分量
x0=2*column+2;
y0=2*row+2;
R=m_ptrData[y0*m_nColumnNum+x0];//R
x=x0-1;
y=y0-1;
c1=m_ptrData[y*m_nColumnNum+x];//B
x=x0-1;
y=y0;
c2=m_ptrData[y*m_nColumnNum+x];//G
x=x0-1;
y=y0+1;
c3=m_ptrData[y*m_nColumnNum+x];//B
x=x0;
y=y0-1;
c4=m_ptrData[y*m_nColumnNum+x];//G
x=x0;
y=y0+1;
c5=m_ptrData[y*m_nColumnNum+x];//G
x=x0+1;
y=y0-1;
c6=m_ptrData[y*m_nColumnNum+x];//B
x=x0+1;
y=y0;
c7=m_ptrData[y*m_nColumnNum+x];//G
x=x0+1;
y=y0+1;
c8=m_ptrData[y*m_nColumnNum+x];//B
R=R;
G=(c2+c4+c5+c7)/4;
B=(c1+c3+c6+c8)/4;
m_ptrInteData[y0*nBytesPerRow+3*x0+0]=B;
m_ptrInteData[y0*nBytesPerRow+3*x0+1]=G;
m_ptrInteData[y0*nBytesPerRow+3*x0+2]=R;
}
Invalidate();
}
if(m_nRowOrColu==id_even)
{
columnEge=(m_nColumnNum-2)/2;
rowEge=(m_nRowNum-2)/2;
for(row=0;row<rowEge;row++)
for(column=0;column<columnEge;column++)
{
//获得8临域
//处理R色分量(2n+1,2n+1)
x0=2*column+1;
y0=2*row+1;
R=m_ptrData[y0*m_nColumnNum+x0];
x=x0-1;
y=y0-1;
c1=m_ptrData[y*m_nColumnNum+x];//B
x=x0-1;
y=y0;
c2=m_ptrData[y*m_nColumnNum+x];//G
x=x0-1;
y=y0+1;
c3=m_ptrData[y*m_nColumnNum+x];//B
x=x0;
y=y0-1;
c4=m_ptrData[y*m_nColumnNum+x];//G
x=x0;
y=y0+1;
c5=m_ptrData[y*m_nColumnNum+x];//G
x=x0+1;
y=y0-1;
c6=m_ptrData[y*m_nColumnNum+x];//B
x=x0+1;
y=y0;
c7=m_ptrData[y*m_nColumnNum+x];//G
x=x0+1;
y=y0+1;
c8=m_ptrData[y*m_nColumnNum+x];//B
B=(c1+c3+c6+c8)/4;
G=(c2+c4+c5+c7)/4;
R=R;
m_ptrInteData[y0*nBytesPerRow+3*x0+0]=B;
m_ptrInteData[y0*nBytesPerRow+3*x0+1]=G;
m_ptrInteData[y0*nBytesPerRow+3*x0+2]=R;
}
for(row=0;row<rowEge;row++)
for(column=0;column<columnEge;column++)
{
//获得8临域
//处理G1分量
x0=2*column+2;
y0=2*row+1;
G=m_ptrData[y0*m_nColumnNum+x0];//G
x=x0-1;
y=y0-1;
c1=m_ptrData[y*m_nColumnNum+x];//R
x=x0-1;
y=y0;
c2=m_ptrData[y*m_nColumnNum+x];//G
x=x0-1;
y=y0+1;
c3=m_ptrData[y*m_nColumnNum+x];//B
x=x0;
y=y0-1;
c4=m_ptrData[y*m_nColumnNum+x];//B
x=x0;
y=y0+1;
c5=m_ptrData[y*m_nColumnNum+x];//B
x=x0+1;
y=y0-1;
c6=m_ptrData[y*m_nColumnNum+x];//G
x=x0+1;
y=y0;
c7=m_ptrData[y*m_nColumnNum+x];//R
x=x0+1;
y=y0+1;
c8=m_ptrData[y*m_nColumnNum+x];//G
B=(c3+c4+c5)/3;
G=(G+c2+c6+c8)/3;
R=(c1+c7)/2;
m_ptrInteData[y0*nBytesPerRow+3*x0+0]=B;
m_ptrInteData[y0*nBytesPerRow+3*x0+1]=G;
m_ptrInteData[y0*nBytesPerRow+3*x0+2]=R;
}
for(row=0;row<rowEge;row++)
for(column=0;column<columnEge;column++)
{
//获得8临域
//处理G2分量
x0=2*column+1;
y0=2*row+2;
G=m_ptrData[y0*m_nColumnNum+x0];//G
x=x0-1;
y=y0-1;
c1=m_ptrData[y*m_nColumnNum+x];//G
x=x0-1;
y=y0;
c2=m_ptrData[y*m_nColumnNum+x];//B
x=x0-1;
y=y0+1;
c3=m_ptrData[y*m_nColumnNum+x];//G
x=x0;
y=y0-1;
c4=m_ptrData[y*m_nColumnNum+x];//R
x=x0;
y=y0+1;
c5=m_ptrData[y*m_nColumnNum+x];//R
x=x0+1;
y=y0-1;
c6=m_ptrData[y*m_nColumnNum+x];//G
x=x0+1;
y=y0;
c7=m_ptrData[y*m_nColumnNum+x];//B
x=x0+1;
y=y0+1;
c8=m_ptrData[y*m_nColumnNum+x];//G
B=(c2+c7)/2;
G=(G+c1+c3+c6+c8)/5;
R=(c4+c5)/2;
m_ptrInteData[y0*nBytesPerRow+3*x0+0]=B;
m_ptrInteData[y0*nBytesPerRow+3*x0+1]=G;
m_ptrInteData[y0*nBytesPerRow+3*x0+2]=R;
}
for(row=0;row<rowEge;row++)
for(column=0;column<columnEge;column++)
{
//获得8临域
//处理B分量
x0=2*column+2;
y0=2*row+2;
B=m_ptrData[y0*m_nColumnNum+x0];//B
x=x0-1;
y=y0-1;
c1=m_ptrData[y*m_nColumnNum+x];//R
x=x0-1;
y=y0;
c2=m_ptrData[y*m_nColumnNum+x];//G
x=x0-1;
y=y0+1;
c3=m_ptrData[y*m_nColumnNum+x];//R
x=x0;
y=y0-1;
c4=m_ptrData[y*m_nColumnNum+x];//G
x=x0;
y=y0+1;
c5=m_ptrData[y*m_nColumnNum+x];//G
x=x0+1;
y=y0-1;
c6=m_ptrData[y*m_nColumnNum+x];//R
x=x0+1;
y=y0;
c7=m_ptrData[y*m_nColumnNum+x];//G
x=x0+1;
y=y0+1;
c8=m_ptrData[y*m_nColumnNum+x];//R
B=B;
G=(c2+c4+c5+c7)/4;
R=(c1+c3+c6+c8)/4;
m_ptrInteData[y0*nBytesPerRow+3*x0+0]=B;
m_ptrInteData[y0*nBytesPerRow+3*x0+1]=G;
m_ptrInteData[y0*nBytesPerRow+3*x0+2]=R;
}
Invalidate();
}
}
void CImageDisView::OnIniImage()
{
// TODO: Add your command handler code here
int row=0,column=0;
int columnEge;
int rowEge;
BYTE C=0;
int nBytesPerRow=m_nColumnNum*3;
for(row=0;row<m_nRowNum;row++)
for(column=0;column<m_nColumnNum;column++)
{
C=m_ptrData[row*m_nColumnNum+column];
m_ptrInteData[row*nBytesPerRow+3*column+0]=C;
m_ptrInteData[row*nBytesPerRow+3*column+1]=C;
m_ptrInteData[row*nBytesPerRow+3*column+2]=C;
}
Invalidate();
}
void CImageDisView::OnSaveImage()
{
// TODO: Add your command handler code here
_savefile();
}
void CImageDisView::_savefile()
{
int r,g,b;
CString pFilePath;
CString path;
CString ExtName;
BYTE* lpBuf=m_ptrDisMemory+54;
int nCount=m_nRowNum*m_nColumnNum*3+54;
pFilePath="";
static char BASED_CODE szFilter[] = "BMP Files(*.bmp)|*.bmp|Word Files (*.doc)|*.doc||";
CFileDialog m_ldFile(FALSE, ".BMP", pFilePath,OFN_HIDEREADONLY | OFN_OVERWRITEPROMPT, szFilter);
if (m_ldFile.DoModal()==IDOK)
{
ExtName=m_ldFile.GetFileExt();
CFile _SaveFile;
pFilePath=m_ldFile.GetPathName();
_SaveFile.Open(pFilePath,CFile::modeCreate|CFile::modeWrite);
if(ExtName=="bmp")
{
for(int row=0;row<m_nRowNum;row++)
for(int column=0;column<m_nColumnNum;column++)
{
r=m_ptrInteData[row*m_nColumnNum*3+3*column+2];
g=m_ptrInteData[row*m_nColumnNum*3+3*column+1];
b=m_ptrInteData[row*m_nColumnNum*3+3*column+0];
lpBuf[row*m_nColumnNum*3+3*column+2]=r;
lpBuf[row*m_nColumnNum*3+3*column+1]=g;
lpBuf[row*m_nColumnNum*3+3*column+0]=b;
}
_SaveFile.Write(m_ptrDisMemory,nCount);
_SaveFile.Close();
}
if(ExtName=="doc")
{
CString ss;
for(int row=0;row<m_nRowNum;row++)
for(int column=0;column<m_nColumnNum;column++)
{
//r=m_ptrData[row*m_nColumnNum*3+3*column+2];
//g=m_ptrData[row*m_nColumnNum*3+3*column+1];
//b=m_ptrData[row*m_nColumnNum*3+3*column+0];
r=m_ptrData[row*m_nColumnNum+column];
//ss.Format("%02x %02x %02x,",r,g,b);
//if(column<m_nColumnNum-1) ss.Format("%02x %02x %02x,",r,g,b);
//if(column==m_nColumnNum-1) ss.Format("%02x %02x %02x\n",r,g,b);
if(column<m_nColumnNum-1) ss.Format("%02x,",r);
if(column==m_nColumnNum-1) ss.Format("%02x\n",r);
_SaveFile.Write(ss,ss.GetLength());
}
_SaveFile.Close();
}
}
else
AfxMessageBox("没有选择文件夹!");
}
void CImageDisView::OnIniColorImage()
{
int row=0,column=0;
int columnEge=0;
int rowEge=0;
BYTE R=0,G=0,B=0;
int nBytesPerRow=m_nColumnNum*3;
int x=0,y=0;
int x0=0,y0=0;
int c1=0,c2=0,c3=0,c4=0,c5=0,c6=0,c7=0,c8=0;
if(m_nRowOrColu==id_even)
{
m_bIniColorImage=true;
columnEge=m_nColumnNum/2;
rowEge=m_nRowNum/2;
for(row=0;row<rowEge;row++)
for(column=0;column<columnEge;column++)
{
//获得8临域
//处理R色分量(2n+1,2n+1)
x0=2*column+1;
y0=2*row+1;
R=m_ptrData[y0*m_nColumnNum+x0];
//m_ptrInteData[y0*nBytesPerRow+3*x0+0]=0;
//m_ptrInteData[y0*nBytesPerRow+3*x0+1]=0;
//m_ptrInteData[y0*nBytesPerRow+3*x0+2]=R;
m_ptrInteData[y0*nBytesPerRow+3*x0+0]=R;
m_ptrInteData[y0*nBytesPerRow+3*x0+1]=0;
m_ptrInteData[y0*nBytesPerRow+3*x0+2]=0;
}
for(row=0;row<rowEge;row++)
for(column=0;column<columnEge;column++)
{
//获得8临域
//处理G1分量
x0=2*column+1;
y0=2*row;
G=m_ptrData[y0*m_nColumnNum+x0];//G
G=G/2;
m_ptrInteData[y0*nBytesPerRow+3*x0+0]=0;
m_ptrInteData[y0*nBytesPerRow+3*x0+1]=G;
m_ptrInteData[y0*nBytesPerRow+3*x0+2]=0;
}
for(row=0;row<rowEge;row++)
for(column=0;column<columnEge;column++)
{
//获得8临域
//处理G2分量
x0=2*column;
y0=2*row+1;
G=m_ptrData[y0*m_nColumnNum+x0];//G
G=G/2;
m_ptrInteData[y0*nBytesPerRow+3*x0+0]=0;
m_ptrInteData[y0*nBytesPerRow+3*x0+1]=G;
m_ptrInteData[y0*nBytesPerRow+3*x0+2]=0;
}
for(row=0;row<rowEge;row++)
for(column=0;column<columnEge;column++)
{
//获得8临域
//处理B分量
x0=2*column;
y0=2*row;
B=m_ptrData[y0*m_nColumnNum+x0];//B
//m_ptrInteData[y0*nBytesPerRow+3*x0+0]=B;
//m_ptrInteData[y0*nBytesPerRow+3*x0+1]=0;
//m_ptrInteData[y0*nBytesPerRow+3*x0+2]=0;
m_ptrInteData[y0*nBytesPerRow+3*x0+0]=0;
m_ptrInteData[y0*nBytesPerRow+3*x0+1]=0;
m_ptrInteData[y0*nBytesPerRow+3*x0+2]=B;
}
Invalidate();
AfxMessageBox("ok!");
}
}
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -