GetObject用法请教

ABC_CCB_chenmo 2012-12-29 08:21:50
HBITMAP hBmp = (HBITMAP)LoadImage( NULL, "C:\\1.BMP", IMAGE_BITMAP, 0, 0,
LR_CREATEDIBSECTION | LR_DEFAULTSIZE | LR_LOADFROMFILE );

int ret = GetObject( hBmp , sizeof(BITMAP) , &bmp );
BYTE* pPixel = (BYTE*)bmp.bmBits; //这个指向位图的哪个位置?左下角?左上角?
BYTE *pEndset = pPixel + (bmp.bmHeight - 1) * bmp.bmWidthBytes;//这个值向位图的哪个位置

...全文
215 6 打赏 收藏 转发到动态 举报
写回复
用AI写文章
6 条回复
切换为时间正序
请发表友善的回复…
发表回复
gfm688 2012-12-30
  • 打赏
  • 举报
回复
是的,我自己做了图片作过实验,将*pPixel和*pEndset printf出来看过,*pPixel是左下角像素的蓝色分量,*pEndset是左上角像素的蓝色分量 既然 pEndset = pPixel + (bmp.bmHeight - 1) * bmp.bmWidthBytes,要往下扫描当然是采用地址减了
ABC_CCB_chenmo 2012-12-30
  • 打赏
  • 举报
回复
引用 4 楼 xianglitian 的回复:
应该是左上右下吧
左上右下恐怕不太对。 如果是左上开始, BYTE *pEndset = pPixel + (bmp.bmHeight - 1) * bmp.bmWidthBytes; 这条语句是到不了右下角。 我觉得应该是gfm688那种左下左上,但是那个代码再后续扫描的过程中,pEndset - y * bmp.bmWidthBytes采用地址减无法理解。
向立天 2012-12-30
  • 打赏
  • 举报
回复
应该是左上右下吧
ABC_CCB_chenmo 2012-12-30
  • 打赏
  • 举报
回复
for (y=0;y<bmp.bmHeight;++y) { for (x=0;x<(BMP_WIDTH+7)/8;++x) { v=0; for ( z=7;z>=0;z-- ) { pOffset = (pEndset - y * bmp.bmWidthBytes) + (x*8+z) * 4; //那为什么在这个地方pEndset地址采用减的方式。左上角是高地址位吗? DWORD rgb = 0; memcpy( &rgb , pOffset , 4 ); if ( rgb != 16777215 ) v |= _ROLE[7-z]; } m_Temp[y][x] = v; } }
gfm688 2012-12-29
  • 打赏
  • 举报
回复
我搞错了 BYTE* pPixel = (BYTE*)bmp.bmBits; //左下角 BYTE *pEndset = pPixel + (bmp.bmHeight - 1) * bmp.bmWidthBytes;//左上角
gfm688 2012-12-29
  • 打赏
  • 举报
回复
BYTE* pPixel = (BYTE*)bmp.bmBits; //左上角 BYTE *pEndset = pPixel + (bmp.bmHeight - 1) * bmp.bmWidthBytes;//左下角

19,468

社区成员

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

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