人民币求 vc++ 把bmp图片变黑白

人民币求vc++把bmp图片变黑白并把黑白相间的地方描边qq:248927082会者加我... 人民币求 vc++ 把bmp图片变黑白 并把黑白相间的地方描边
qq:248927082 会者加我
展开
 我来答
hacker0501
2009-10-07 · TA获得超过409个赞
知道小有建树答主
回答量:155
采纳率:0%
帮助的人:87.6万
展开全部
这就人民币了 哪你学完得多少钱啊

查找图像的边界的通用方法就是用阈值
也就是相邻象素的颜色差是否超过一个预先指定的数值的方法
如果相邻颜色超过阈值,那么表示这个两个颜色分别属于不同的区域,边界线就在他们的中间了
补充一句:把你的r,g,b 三色的值加起来除以3就是灰度值了

转黑白更简单了
我以前用过的函数 贴给你 看不明白我也没辙了
void CDibView::OnMenuchange() file://图像转换实现函数
{
// TODO: Add your command handler code here
HANDLE data1handle;
LPBITMAPINFOHEADER lpBi;
BITMAPINFO *m_pBMI;
CDibDoc *pDoc=GetDocument();
HDIB hdib;
unsigned char *hData;
unsigned char *data;
hdib=pDoc->GetHDIB();//得到位图数据的句柄,其中包含图像信息头
BeginWaitCursor();
lpBi=(LPBITMAPINFOHEADER)GlobalLock((HGLOBAL)hdib);
hData=(unsigned char*)FindDIBBits((LPSTR)lpBi);
m_pBMI=new BITMAPINFO;//生成彩色图像的信息头
m_pBMI->bmiHeader.biBitCount=24;
m_pBMI->bmiHeader.biClrImportant=0;
m_pBMI->bmiHeader.biClrUsed=0;
m_pBMI->bmiHeader.biCompression=BI_RGB;
m_pBMI->bmiHeader.biHeight=lpBi->biHeight;
m_pBMI->bmiHeader.biWidth=lpBi->biWidth;
m_pBMI->bmiHeader.biPlanes=1;
m_pBMI->bmiHeader.biSize=sizeof(BITMAPINFOHEADER);
m_pBMI->bmiHeader.biXPelsPerMeter=0;
m_pBMI->bmiHeader.biYPelsPerMeter=0;
m_pBMI->bmiHeader.biSizeImage=WIDTHBYTES(lpBi->biWidth*8)*lpBi->biHeight*3;
file://data=hData;
int R,G,B,i,j;
data1handle=GlobalAlloc(GMEM_SHARE,WIDTHBYTES(lpBi->biWidth*8)*lpBi->biHeight*3);
file://生成存储彩色图象数据的缓冲区
data=(unsigned char*)GlobalLock((HGLOBAL)data1handle);
for(i=0;ibiHeight;i++)//实现灰度到彩色变换
for(j=0;jbiWidth*8);j++)
{
if(*(hData+i*WIDTHBYTES(lpBi->biWidth*8)+j)<=64)
{R=0;
G=(int)4*(*(hData+i*WIDTHBYTES(lpBi->biWidth*8)+j));
B=255;
}
if(*(hData+i*WIDTHBYTES(lpBi->biWidth*8)+j)>64
&& *(hData+i*WIDTHBYTES(lpBi->biWidth*8)+j)<=128)
{R=0;
G=255;
B=(int)4*(128-*(hData+i*WIDTHBYTES(lpBi->biWidth*8)+j));
}
if(*(hData+i*WIDTHBYTES(lpBi->biWidth*8)+j)>128
&& *(hData+i*WIDTHBYTES(lpBi->biWidth*8)+j)<=192)
{R=(int)4*(*(hData+i*WIDTHBYTES(lpBi->biWidth*8)+j)-128);
G=255;
B=0;
}
if(*(hData+i*WIDTHBYTES(lpBi->biWidth*8)+j)>192
&& *(hData+i*WIDTHBYTES(lpBi->biWidth*8)+j)<=255)
{R=255;
G=(int)4*(255-*(hData+i*WIDTHBYTES(lpBi->biWidth*8)+j));
B=0;
}
file://将生成的R、G、B分量存入目标缓冲区
*(data+i*WIDTHBYTES(lpBi->biWidth*8)*3+j*3)=B;
*(data+i*WIDTHBYTES(lpBi->biWidth*8)*3+j*3+1)=G;
*(data+i*WIDTHBYTES(lpBi->biWidth*8)*3+j*3+2)=R;
}
GlobalUnlock((HGLOBAL)hdib);
GlobalUnlock(data1handle);
EndWaitCursor();
CClientDC pDC(this);
file://显示真彩色图像
StretchDIBits(pDC.GetSafeHdc(),0,0,lpBi->biWidth,lpBi->biHeight,0,0,
lpBi->biWidth, lpBi->biHeight,data,m_pBMI,DIB_RGB_COLORS,
SRCCOPY);
delete m_pBMI;
}
推荐律师服务: 若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询

为你推荐:

下载百度知道APP,抢鲜体验
使用百度知道APP,立即抢鲜体验。你的手机镜头里或许有别人想知道的答案。
扫描二维码下载
×

类别

我们会通过消息、邮箱等方式尽快将举报结果通知您。

说明

0/200

提交
取消

辅 助

模 式