📄 雕刻技术.txt
字号:
void CDibView::OnDKImage()
{
CDibDoc *pDoc=GetDocument();
//文件数据句柄
HANDLE data1handle;
//文件信息头指针
LPBITMAPINFOHEADER lpBi;
//文件数据句柄
HDIB hdib;
//数据区指针
unsigned char *hData;
unsigned char *data;
//得到数据句柄
hdib=pDoc->GetHDIB();
//设定鼠标形状为等待
BeginWaitCursor();
//锁定内存
lpBi=(LPBITMAPINFOHEADER)GlobalLock((HGLOBAL)hdib);
//使得hData指向数据去开始
hData=(unsigned char*)FindDIBBits((LPSTR)lpBi);
//设置修改标志
pDoc->SetModifiedFlag(TRUE);
//分配内存
data1handle=GlobalAlloc(GMEM_SHARE,WIDTHBYTES(lpBi->biWidth*8)*lpBi->biHeight);
//锁定内存
data=(unsigned char*)GlobalLock((HGLOBAL)data1handle);
//更改鼠标形状
AfxGetApp()->BeginWaitCursor();
int i,j,buf;
//图像的"雕刻"处理
for( i=0;i<=lpBi->biHeight-2; i++)
for(j=0;j<=lpBi->biWidth-2;j++) {
//计算得到浮雕后的数值
buf=*(hData+(lpBi->biHeight-i)*WIDTHBYTES(lpBi->biWidth*8)+j)-*(hData+(lpBi->biHeight-i-1)*WIDTHBYTES(lpBi->biWidth*8)+j+1)+128;
//临界判断
if(buf>255) buf=255;
if(buf<0)buf=0;
//保存数值
*(data+(lpBi->biHeight-i)*WIDTHBYTES(lpBi->biWidth*8)+j)=(BYTE)buf;
}
for( j=0; jbiHeight; j++)
for( i=0; ibiWidth; i++)
//重新将处理后的图像数据写入原始的图像缓冲区内
*(hData+i*WIDTHBYTES(lpBi->biWidth*8)+j)=*(data+i*WIDTHBYTES(lpBi->biWidth*8)+j);
AfxGetApp()->EndWaitCursor();
GlobalUnlock((HGLOBAL)hdib);
GlobalUnlock(data1handle);
EndWaitCursor();
Invalidate(TRUE);
}
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -