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 变量中?我不想保存到磁盘后又读取的办法? 展开
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 变量中?我不想保存到磁盘后又读取的办法? 展开
2个回答
展开全部
pData里面保存的就是一个一个的COLORREF结构,你只需要通过BITMAPINFOHEADER中的宽高等信息,计算位移,就可以读取某个点的RGB值了。
还有一个简单的办法,你之前已经有memBitmap这个CBitmap了,通过这个做更方便。通过SelectObject将memBitmap放到一个CDC中,直接使用函数GetPixel函数就可以获取指定某个点的RGB值了,这个不需要计算和位移。
还有一个简单的办法,你之前已经有memBitmap这个CBitmap了,通过这个做更方便。通过SelectObject将memBitmap放到一个CDC中,直接使用函数GetPixel函数就可以获取指定某个点的RGB值了,这个不需要计算和位移。
追问
哎呀,你这一说我一通百通弄懂了!分给你吧!看来你是一等一的高手,方不方便留个QQ号什么的,下次我有问题还问你,不给分了,我网银转账酬谢。
追答
单位禁Q。有问题可以在这里向我定向求助。
推荐律师服务:
若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询