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

📄 shiqian0197view.cpp

📁 这是一个用ppt做的软件工程实习有关的资料
💻 CPP
📖 第 1 页 / 共 4 页
字号:
	PixelValue[2] = -1.0;
	PixelValue[3] = -1.0;
	PixelValue[4] =  9.0;
	PixelValue[5] = -1.0;
	PixelValue[6] = -1.0;
	PixelValue[7] = -1.0;
	PixelValue[8] = -1.0;

	LPSTR	lpNewDIBBits;
	HLOCAL	hNewDIBBits;
	unsigned char*	lpSrc;
	unsigned char*	lpDst;
    long   i,j,k,l;
	float	fResult;
	long lLineBytes= WIDTHBYTES(width*8);
	hNewDIBBits = LocalAlloc(LHND, lLineBytes*height);
	lpNewDIBBits = (char * )LocalLock(hNewDIBBits);
	memcpy(lpNewDIBBits, lpDIBBits, lLineBytes * height);

	for(i = iTempMY; i <height-iTempH+iTempMY+1; i++)
	{
		for(j = iTempMX; j <width-iTempW+iTempMX+1; j++)
		{
			lpDst = (unsigned char*)lpNewDIBBits+lLineBytes*(height-1-i)+j;
			fResult = 0;

	        int m=0;
			for (k = 0; k <iTempH; k++)
			{
				for (l = 0; l < iTempW; l++)
				{
					lpSrc = (unsigned char*)lpDIBBits+lLineBytes*(height-1-i+iTempMY-k)
						+j-iTempMX+l;
					fResult+=(*lpSrc)*PixelValue[m];
					 m++;  
				}
			}
        if(fResult<0)  fResult=0;
		else if(fResult > 255)
			{
				* lpDst = 255;
			}
			else
			{
				* lpDst = (unsigned char) (fResult + 0.5);
			}
			
		}
	}
	memcpy(lpDIBBits, lpNewDIBBits, lLineBytes*height);
	LocalUnlock(hNewDIBBits);
	LocalFree(hNewDIBBits);
    InvalidateRect(NULL,TRUE);	


}

void CShiqian0197View::OnLvboFfhigh() 
{
	// TODO: Add your command handler code here
// TODO: Add your command handler code here
	int		iTempH;
	int		iTempW;
    int		iTempMX;
	int		iTempMY;
	float	PixelValue[25];

	CShiqian0197Doc* pDoc = GetDocument();

    HDIB hDIB;
    hDIB=pDoc->m_hDIB;
   if (hDIB==NULL)   
	   return;
   LPSTR lpDIB=(LPSTR)GlobalLock((HGLOBAL)hDIB);
   int width=DIBWidth(lpDIB);
   int height=DIBHeight(lpDIB);
   LPSTR lpDIBBits=FindDIBBits(lpDIB);
   int bitcount=((LPBITMAPINFOHEADER)lpDIB)->biBitCount;		
   // 设置拉普拉斯模板参数
	iTempW = 5;
	iTempH = 5;

	iTempMX = 2;
	iTempMY = 2;
	PixelValue[0] = -1.0;
	PixelValue[1] = -1.0;
	PixelValue[2] = -1.0;
	PixelValue[3] = -1.0;
	PixelValue[4] = -1.0;
	PixelValue[5] = -1.0;
	PixelValue[6] = -1.0;
	PixelValue[7] = -1.0;
	PixelValue[8] = -1.0;
	PixelValue[9] = -1.0;
    PixelValue[10] = -1.0;
	PixelValue[11] = -1.0;
	PixelValue[12] = 25.0;
	PixelValue[13] = -1.0;
	PixelValue[14] = -1.0;
	PixelValue[15] = -1.0;
	PixelValue[16] = -1.0;
	PixelValue[17] = -1.0;
	PixelValue[18] = -1.0;
	PixelValue[19] = -1.0;
	PixelValue[20] = -1.0;
	PixelValue[21] = -1.0;
	PixelValue[22] = -1.0;
	PixelValue[23] = -1.0;
	PixelValue[24] = -1.0;

	LPSTR	lpNewDIBBits;
	HLOCAL	hNewDIBBits;
	unsigned char*	lpSrc;
	unsigned char*	lpDst;
    long    i,j,k,l;
	float	fResult;
	long lLineBytes= WIDTHBYTES(width*8);
	hNewDIBBits = LocalAlloc(LHND, lLineBytes*height);
	lpNewDIBBits = (char * )LocalLock(hNewDIBBits);
	memcpy(lpNewDIBBits, lpDIBBits, lLineBytes * height);

	for(i = iTempMY; i <height-iTempH+iTempMY+1; i++)
	{
		for(j = iTempMX; j <width-iTempW+iTempMX+1; j++)
		{
			lpDst = (unsigned char*)lpNewDIBBits+lLineBytes*(height-1-i)+j;
			fResult = 0;

	        int m=0;
			for (k = 0; k <iTempH; k++)
			{
				for (l = 0; l < iTempW; l++)
				{
					lpSrc = (unsigned char*)lpDIBBits+lLineBytes*(height-1-i+iTempMY-k)
						+j-iTempMX+l;
					fResult+=(*lpSrc)*PixelValue[m];
					 m++;  
				}
			}
        if(fResult<0)  fResult=0;
		else if(fResult > 255)
			{
				* lpDst = 255;
			}
			else
			{
				* lpDst = (unsigned char) (fResult + 0.5);
			}
			
		}
	}
	memcpy(lpDIBBits, lpNewDIBBits, lLineBytes*height);
	LocalUnlock(hNewDIBBits);
	LocalFree(hNewDIBBits);
    InvalidateRect(NULL,TRUE);		
}

void CShiqian0197View::OnLvboMiddle() 
{
	// TODO: Add your command handler code here
		CShiqian0197Doc* pDoc = GetDocument();
	ASSERT_VALID(pDoc);
	LPSTR pdib=(LPSTR)::GlobalLock((HGLOBAL)pDoc->m_hDIB);
	LPBITMAPINFOHEADER lpbmi;
	lpbmi = (LPBITMAPINFOHEADER)pdib;
	LPSTR pstart;
	pstart=::FindDIBBits(pdib);
	int size;
	int width;
	width=((8) + 31) / 32 * 4;
	size=lpbmi->biSizeImage;
	long t1,t2,t3;
	int i;
	long a;
	for(i=0;i<size-2;i++)
	{
		if(i%width==width-1||i%width==0)
			continue;
		t1=pstart[i];
		t2=pstart[i+1];
		t3=pstart[i+2];
		if(t1<t2)
		{
			if(t2>t3)
			{
				a=t2;t2=t3;t3=a;
				pstart[i+1]=(char)t2;
			}
			pstart[i+1]=(char)t2;
		}
		else
		{
			a=t1;t1=t2;t2=a;
			if(t2>t3)
			{
				a=t2;t2=t3;t3=a;
				pstart[i+1]=(char)t2;
			}
			pstart[i+1]=(char)t2;
		}
	}
	InvalidateRect(NULL,TRUE);	

}

void CShiqian0197View::OnLvboUserdefined() 
{
	// TODO: Add your command handler code here
	CShiqian0197Doc* pDoc = GetDocument();
	ASSERT_VALID(pDoc);
	LPSTR pdib=(LPSTR)::GlobalLock((HGLOBAL)pDoc->m_hDIB);
	LPBITMAPINFOHEADER lpbmi;
	lpbmi = (LPBITMAPINFOHEADER)pdib;
	LPSTR pstart;
	pstart=::FindDIBBits(pdib);
	int size;
	int width;
	width=((8) + 31) / 32 * 4;
	size=lpbmi->biSizeImage;
	long t1,t2,t3;
	int i;
	long a;
	for(i=0;i<size-2;i++)
	{
		if(i%width==width-1||i%width==0)
			continue;
		t1=pstart[i];
		t2=pstart[i+1];
		t3=pstart[i+2];
		if(t1<t2)
		{
			if(t2>t3)
			{
				a=t2;t2=t3;t3=a;
				pstart[i+1]=(char)t2;
			}
			pstart[i+1]=(char)t2;
		}
		else
		{
			a=t1;t1=t2;t2=a;
			if(t2>t3)
			{
				a=t2;t2=t3;t3=a;
				pstart[i+1]=(char)t2;
			}
			pstart[i+1]=(char)t2;
		}
	}
	InvalidateRect(NULL,TRUE);	
	
}

void CShiqian0197View::OnGeoZoomBig() 
{
	// TODO: Add your command handler code here
 CZoomdlg dex;//定义格式转换对话框类对象


	CShiqian0197Doc *pDoc=GetDocument();
	ASSERT_VALID(pDoc);

	HDIB hDIB=pDoc->GetHDIB();
	LPSTR lpDIB;
	LPSTR lpDIBBits;

	lpDIB=(LPSTR)::GlobalLock(hDIB);
	lpDIBBits=::FindDIBBits(lpDIB);

	if(dex.DoModal()==IDOK)
	{
	  UpdateData(false);
	}	
	LPBYTE lpDst;                  
	LPBYTE lpSrc;                 
    long lWidth=::DIBWidth(lpDIB);
	long lHeight=::DIBHeight(lpDIB);

	long lNewWidth=(long)(lWidth*dex.m_dZoomH+0.5);
	long lNewHeight=(long)(lHeight*dex.m_dZoomV+0.5);

	HDIB hNewDIB;
	LPSTR lpNewDIB;
	LPSTR lpNewDIBBits;

	hNewDIB=(HDIB)::GlobalAlloc(GHND,lNewWidth*lNewHeight+40+PaletteSize(lpDIB));
		if(hNewDIB==NULL)
		{
			return;
		}
	lpNewDIB=(LPSTR)::GlobalLock(hNewDIB);
	memcpy(lpNewDIB,lpDIB,40+PaletteSize(lpDIB));
    lpNewDIBBits=::FindDIBBits(lpNewDIB);

	LPBITMAPINFOHEADER lpinfo;

	lpinfo=(LPBITMAPINFOHEADER)lpNewDIB;
	lpinfo->biWidth=lNewWidth;
	lpinfo->biHeight=lNewHeight;
		lpinfo->biSizeImage=lNewHeight*lNewWidth;
		long i,j,i0,j0;
	    for(i=0;i<lNewHeight;i++)
	    	for(j=0;j<lNewWidth;j++)
			{
              lpDst=(LPBYTE)(lpNewDIBBits+lNewWidth*i+j);
			  i0=(long)(i/dex.m_dZoomH+0.5);
			  j0=(long)(j/dex.m_dZoomV+0.5);
			  if((i0>=0)&&(i0<=lHeight)&&(j0>=0)&&(j0<=lWidth))
			  {
				  lpSrc=(LPBYTE)(lpDIBBits+lWidth*i0+j0);
			      (*lpDst)=(*lpSrc);
			  }
			      else
                      (*lpDst)=255;

			  
			}	
		pDoc->ReplaceHDIB(hNewDIB);			// 替换DIB,同时释放旧DIB对象		
		pDoc->InitDIBData();				// 更新DIB大小和调色板		
		pDoc->SetModifiedFlag(TRUE);		// 设置脏标记		
		SetScrollSizes(MM_TEXT, pDoc->GetDocSize());// 重新设置滚动视图大小		
		pDoc->UpdateAllViews(NULL);			// 更新视图
	
}

void CShiqian0197View::OnGeoZoomSmall() 
{
	// TODO: Add your command handler code here
		// TODO: Add your command handler code here

	CShiqian0197Doc *pDoc=GetDocument();
	ASSERT_VALID(pDoc);

	CZoom1dlg dex;
	if(dex.DoModal()==IDOK)
	{
	  UpdateData(false);
	}	


	HDIB hDIB=pDoc->GetHDIB();
	LPSTR lpDIB;
	LPSTR lpDIBBits;
    LPBYTE lpSrc; 

    HDIB hNewDIB;
	LPSTR lpNewDIB;
	LPSTR lpNewDIBBits;
	LPBYTE lpDst;  
	LPBITMAPINFOHEADER lpinfo;


	lpDIB=(LPSTR)::GlobalLock(hDIB);
	lpDIBBits=::FindDIBBits(lpDIB);
    long lWidth=::DIBWidth(lpDIB);
	long lHeight=::DIBHeight(lpDIB);

	float fx=dex.m_dzoom1h;
	float fy=dex.m_dzoom1v;

	long lNewWidth=(long)(lWidth*fx+0.5);
	long lNewHeight=(long)(lHeight*fy+0.5);

/***********************对新图象设置************************/

	hNewDIB=(HDIB)::GlobalAlloc(GHND,lNewWidth*lNewHeight+40+PaletteSize(lpDIB));
		if(hNewDIB==NULL)
		{
			return;
		}
	lpNewDIB=(LPSTR)::GlobalLock(hNewDIB);
	memcpy(lpNewDIB,lpDIB,40+PaletteSize(lpDIB));
    lpNewDIBBits=::FindDIBBits(lpNewDIB);
	lpinfo=(LPBITMAPINFOHEADER)lpNewDIB;
	lpinfo->biWidth=lNewWidth;
	lpinfo->biHeight=lNewHeight;
	lpinfo->biSizeImage=lNewHeight*lNewWidth;
		long i,j,i0,j0;
	    for(i=0;i<lNewHeight;i++)
	    	for(j=0;j<lNewWidth;j++)
			{
              lpDst=(LPBYTE)(lpNewDIBBits+lNewWidth*i+j);
			  i0=(long)(i/fx+0.5);
			  j0=(long)(j/fx+0.5);
			  if((i0>=0)&&(i0<=lHeight)&&(j0>=0)&&(j0<=lWidth))
			  {
				  lpSrc=(LPBYTE)(lpDIBBits+lWidth*i0+j0);
			      (*lpDst)=(*lpSrc);
			  }
			      else
                      (*lpDst)=255;

			  
			}
	pDoc->m_hDIB=hNewDIB;
    pDoc->SetModifiedFlag(TRUE);
	SetScrollSizes(MM_TEXT,pDoc->GetDocSize());
	pDoc->UpdateAllViews(NULL);
}

void CShiqian0197View::OnGeoMove() 
{
	// TODO: Add your command handler code here
    CShiqian0197Doc *pDoc=GetDocument();
	ASSERT_VALID(pDoc);

	CMoveDlg dex;//定义格式转换对话框类对象

	HDIB hDIB=pDoc->GetHDIB();
	LPSTR lpDIB;
	LPSTR lpDIBBits;

	lpDIB=(LPSTR)::GlobalLock(hDIB);
	lpDIBBits=::FindDIBBits(lpDIB);

	if(dex.DoModal()==IDOK)
	{
	  UpdateData(false);
	}	

	LPBYTE lpDst;                  
	LPBYTE lpSrc;                 
    long lWidth=::DIBWidth(lpDIB);
	long lHeight=::DIBHeight(lpDIB);

	long lNewWidth=(long)(lWidth+dex.m_iMoveH+0.5);
	long lNewHeight=(long)(lHeight+dex.m_iMoveV+0.5);

	HDIB hNewDIB;
	LPSTR lpNewDIB;
	LPSTR lpNewDIBBits;

	hNewDIB=(HDIB)::GlobalAlloc(GHND,lNewWidth*lNewHeight+40+PaletteSize(lpDIB));
		if(hNewDIB==NULL)
		{
			return;
		}
	lpNewDIB=(LPSTR)::GlobalLock(hNewDIB);
	memcpy(lpNewDIB,lpDIB,40+PaletteSize(lpDIB));
    lpNewDIBBits=::FindDIBBits(lpNewDIB);

	LPBITMAPINFOHEADER lpinfo;

	lpinfo=(LPBITMAPINFOHEADER)lpNewDIB;
	lpinfo->biWidth=lNewWidth;
	lpinfo->biHeight=lNewHeight;
	lpinfo->biSizeImage=lNewHeight*lNewWidth;

		long i,j,i0,j0;
	    for(i=0;i<lNewHeight;i++)
	    	for(j=0;j<lNewWidth;j++)
			{
              lpDst=(LPBYTE)(lpNewDIBBits+lNewWidth*i+j);
			  i0=(long)(i-dex.m_iMoveH);
			  j0=(long)(j-dex.m_iMoveV);
			  if((i0>=0)&&(i0<=lHeight)&&(j0>=0)&&(j0<=lWidth))
			  {
				  lpSrc=(LPBYTE)(lpDIBBits+lWidth*i0+j0);
			      (*lpDst)=(*lpSrc);
			  }
			      else
                      (*lpDst)=255;

			  
			}
	
		pDoc->ReplaceHDIB(hNewDIB);			// 替换DIB,同时释放旧DIB对象		
		pDoc->InitDIBData();				// 更新DIB大小和调色板		
		pDoc->SetModifiedFlag(TRUE);		// 设置脏标记		
		SetScrollSizes(MM_TEXT, pDoc->GetDocSize());// 重新设置滚动视图大小		
		pDoc->UpdateAllViews(NULL);			// 更新视图
	
}

void CShiqian0197View::OnGeoRotate() 
{

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -