扫一扫
分享文章到微信
扫一扫
关注官方公众号
至顶头条
void CDibView::OnDouDongImage() //产生"抖动"效果图函数 { 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); //FindDIBBits是我定义的一个函数,根据图像的结构得到位图的灰度值数据; 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=lpBi->biHeight; i>=2; i--)//从图像右下角开始对图像的各个像素进行"抖动"处理; 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))/2; if(buf>255) buf=255;//限制像素点的灰度范围为0-255; if(buf<0)buf=0; *(data+(lpBi->biHeight-i)*WIDTHBYTES(lpBi->biWidth*8)+j)=(BYTE)buf; } for( j=0; j<biHeight; j++) for( i=0; i<biWidth; 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);//显示图像 } |
如果您非常迫切的想了解IT领域最新产品与技术信息,那么订阅至顶网技术邮件将是您的最佳途径之一。
现场直击|2021世界人工智能大会
直击5G创新地带,就在2021MWC上海
5G已至 转型当时——服务提供商如何把握转型的绝佳时机
寻找自己的Flag
华为开发者大会2020(Cloud)- 科技行者