C++ 读取位图像素数据

BYTE*pData=newBYTE[dwSize];//位图数据的定义,信息头什么的早写好了!GetDIBits(memDC.m_hDC,(HBITMAP)memBit... BYTE *pData=new BYTE[dwSize];//位图数据的定义,信息头什么的早写好了!
GetDIBits(memDC.m_hDC,(HBITMAP)memBitmap.m_hObject,0,nHeight,pData,(LPBITMAPINFO)&BMIhead,DIB_RGB_COLORS);
CFile file;//创建文件类对象
file.Open(s.begin(),CFile::modeCreate | CFile::modeWrite);//打开bmp如果没有则创建,如果有则写入。
file.Write(&BMFhead,sizeof(BITMAPFILEHEADER));
file.Write(&BMIhead,sizeof(BITMAPINFOHEADER));
file.Write(pData,dwSize);//位图数据,大小,很显然这个数据是可以被保存的。
StretchDIBits(pDc->GetSafeHdc(),100,0,400,400,100,100,500,500,pData,&Bitlnfo,DIB_RGB_COLORS,SRCCOPY);
//而且还可以被画出来
可是我怎么用pData这个东西,把图像上的某个点的RGB拿出来放到int 变量中?我不想保存到磁盘后又读取的办法?
展开
 我来答
bhtzu
2015-01-13 · TA获得超过1.1万个赞
知道大有可为答主
回答量:8088
采纳率:85%
帮助的人:4233万
展开全部
pData里面保存的就是一个一个的COLORREF结构,你只需要通过BITMAPINFOHEADER中的宽高等信息,计算位移,就可以读取某个点的RGB值了。

还有一个简单的办法,你之前已经有memBitmap这个CBitmap了,通过这个做更方便。通过SelectObject将memBitmap放到一个CDC中,直接使用函数GetPixel函数就可以获取指定某个点的RGB值了,这个不需要计算和位移。
追问
哎呀,你这一说我一通百通弄懂了!分给你吧!看来你是一等一的高手,方不方便留个QQ号什么的,下次我有问题还问你,不给分了,我网银转账酬谢。
追答
单位禁Q。有问题可以在这里向我定向求助。
Getline
2015-01-13 · 科技领域创作者
Getline
采纳数:405 获赞数:2705

向TA提问 私信TA
展开全部
配合linebytes 可以算出具体位置
追问
具体一点把哥,我多给些分,50够不够?
追答
linebytes 就是图形一行有多少个byte,如果是24位图那么一个像素是3个byte,如果是32位图则是4个byte。 你的某个点肯定是某行的第几个点,可以根据这个算出来。
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
收起 1条折叠回答
推荐律师服务: 若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询

为你推荐:

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

类别

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

说明

0/200

提交
取消

辅 助

模 式