关于提取图像的RGB数据

lyllm_117228 2009-09-17 03:02:39
m_BData=new BYTE [bm[0].bmHeight*bm[0].bmWidth];
CBitmap *bmp=CBitmap::FromHandle(hBitmap[0]);
bmp->GetBitmapBits(bm[0].bmHeight*bm[0].bmWidth,(void*)m_BData);

for (int i=0;i<bm[0].bmHeight;i++)
{
for (int j=0;j<bm[0].bmWidth;j++)
{
k=i*bm[0].bmWidthBytes+j*pixelByte;
m_BData[k] m_BData[k+1] m_BData[k+2]
}
各拉大哥这m_BData[k] m_BData[k+1] m_BData[k+2]
是不是就是对应的RGB值了
为什么我画出来就不是了
请问大哥
错那里了
...全文
254 7 打赏 收藏 转发到动态 举报
写回复
用AI写文章
7 条回复
切换为时间正序
请发表友善的回复…
发表回复
lyllm_117228 2009-09-20
  • 打赏
  • 举报
回复
谢谢大家了我解决了
cattycat 2009-09-19
  • 打赏
  • 举报
回复
顶楼上,分配内存大小应该是bmHeight*bmWidthBytes。
wltg2001 2009-09-19
  • 打赏
  • 举报
回复
仔细看了一下,又发现有点问题了,
m_BData=new BYTE [bm[0].bmHeight*bm[0].bmWidth];
上面这个不对,内存的大小并不是高*宽,每一个点并不是占一个字节,而且每一行还有对齐问题,所以写作:
应该用GetBitmap先得到相应位图的BITMAP对象,用里面的bmHeight*bmWidthBytes作内存大小。
wltg2001 2009-09-19
  • 打赏
  • 举报
回复
代码好像没有问题,用GetBitmapBits获取的是是RGB值,你是怎么画图的呢?
_葫芦娃 2009-09-19
  • 打赏
  • 举报
回复
楼主你没有注意位图的图像数据指针的地址,先找到 lpDst ;
然后才是你要的吧。
k= *lpDst + i*bm[0].bmWidthBytes+j*pixelByte;
youyifang 2009-09-17
  • 打赏
  • 举报
回复
lpBits
Points to the buffer that is to receive the bitmap. The bitmap is an array of bytes. The bitmap byte array conforms to a structure where horizontal scan lines are multiples of 16 bits
你得到点的RGB值用Getpixel函数,然后用GetRValue, GetBValue, GetGValue函数得到不同的值.
lyllm_117228 2009-09-17
  • 打赏
  • 举报
回复
因为没有界面没有资源
所以只能利用上面的资源

19,468

社区成员

发帖
与我相关
我的任务
社区描述
VC/MFC 图形处理/算法
社区管理员
  • 图形处理/算法社区
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧