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

📄 雕刻技术.txt

📁 数字图像处理技术源代码
💻 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 + -