VC++数字图像处理编程(19)

时间:2026-01-16   来源:未知    
字号:

行"浮雕"处理;

for( j=lpBi->biWidth; j>=2; j--)

{

//浮雕处理

buf=*(pData+(lpBi->biHeight-i)*WIDTHBYTES(lpBi->biWidth*8)+j)-*(pData+(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++)

//重新写回原始图像的数据缓冲区;

*(pData+i*WIDTHBYTES(lpBi->biWidth*8)+j)=*(data+i*WIDTHBYTES(lpBi->biWidth*8)+j); AfxGetApp()->EndWaitCursor();

pDoc->m_hDIB =hdib//将处理过的图像数据写回pDoc中的图像缓冲区; GlobalUnlock((HGLOBAL)hdib);//解锁、释放缓冲区;

GlobalUnlock((HGLOBAL)data1handle);

GlobalFree((HGLOBAL)hdib);

GlobalFree((HGLOBAL)data1handle);

Invalidate(TRUE);//显示图像

}

2."雕刻"图像

上面讲述了通过求一个像素和它左上方像素之间的差值并加上一个常数的方法生成"浮雕"效果的灰度图像,"雕刻"图像与之相反,它是通过取一个像素和它右下方的像素之间的差值并加上一个常数,这里我也取128,经过这样处理,就可以得到"雕刻"图像,这时候图像的前景凹陷进背景之中。同样需要读者注意的是为了避免重复使用处理过的图像像素,处理图像时要从图像的左上方的像素开始处理。实现代码如下:

void CDibView::OnDKImage()

{

// TOD Add your command handler code here

HANDLE data1handle;//这里的内部变量与前面的含义一致、这里不再赘述; LPBITMAPINFOHEADER lpBi;

CDibDoc *pDoc=GetDocument();

HDIB hdib;

unsigned char *pData;

unsigned char *data;

hdib=pDoc->m_hDIB;//拷贝图像数据的句柄;

lpBi=(LPBITMAPINFOHEADER)GlobalLock((HGLOBAL)hdib);

pData=(unsigned char*)FindDIBBits((LPSTR)lpBi);

VC++数字图像处理编程(19).doc 将本文的Word文档下载到电脑,方便复制、编辑、收藏和打印
× 游客快捷下载通道(下载后可以自由复制和排版)
VIP包月下载
特价:19 元/月 原价:99元
低至 0.1 元/份 每月下载300
全站内容免费自由复制
VIP包月下载
特价:19 元/月 原价:99元
低至 0.1 元/份 每月下载300
全站内容免费自由复制
注:下载文档有可能出现无法下载或内容有问题,请联系客服协助您处理。
× 常见问题(客服时间:周一到周五 9:30-18:00)