📄 shiqian0197view.cpp
字号:
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 + -