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

📄 imagedisview.cpp

📁 串口通信显示图像
💻 CPP
📖 第 1 页 / 共 2 页
字号:
				//获得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 + -