如何将指定位置的bmp图片像素值保存到一个二维数组中?

ffpffp 2008-05-19 01:00:49
如题,想要设计一个按钮,按下以后,就可以读取硬盘上指定位置的bmp图片像素值保存到一个二维数组(图宽*图高)中,要怎样实现呢?

我参考了论坛里别人的帖子http://topic.csdn.net/t/20020309/20/565606.html,可是它提供的程序汇报错。

附上我的代码:

void CImageBoardView::OnTest()
{
//load bmp file:"d:\\lego1.bmp"
CDC* pDC;
pDC=GetDC( );
CImageBoardDoc* pDoc = GetDocument();
ASSERT_VALID(pDoc);
// TODO: add draw code for native data here
HBITMAP hbmp=(HBITMAP)LoadImage(NULL,"d:\\lego1.bmp",IMAGE_BITMAP,0,0,LR_CREATEDIBSECTION|LR_LOADFROMFILE);
CBitmap cbmp;
cbmp.Attach(hbmp);
BITMAP bmp;
cbmp.GetBitmap(&bmp);
cbmp.Detach();
UINT * pData = new UINT[bmp.bmWidth * bmp.bmHeight];
BITMAPINFO bmpInfo;
bmpInfo.bmiHeader.biSize = sizeof(BITMAPINFOHEADER);
bmpInfo.bmiHeader.biWidth = bmp.bmWidth;
bmpInfo.bmiHeader.biHeight = -bmp.bmHeight;
bmpInfo.bmiHeader.biPlanes = 1;
bmpInfo.bmiHeader.biCompression = BI_RGB;
bmpInfo.bmiHeader.biBitCount = 32;

GetDIBits(pDC->m_hDC,hbmp,0,bmp.bmHeight,pData,&bmpInfo,DIB_RGB_COLORS);
UINT color, r, g, b;
for(int i = 0; i < bmp.bmWidth * bmp.bmHeight; i ++)
{
color = pData[i];
b = color << 8 >> 24;
g = color << 16 >> 24;
r = color << 24 >> 24;
//note that infact, the r is Blue, b = Red,
r = 0;//mask the blue bits
pData[i] = RGB(r, g, b);
}
SetDIBits(pDC->m_hDC, hbmp,0, bmp.bmHeight, pData,&bmpInfo, DIB_RGB_COLORS);
CDC dcmem;
dcmem.CreateCompatibleDC(pDC);
HGDIOBJ hold=::SelectObject(dcmem.m_hDC,hbmp);
pDC->BitBlt(0,0,bmp.bmWidth,bmp.bmHeight,&dcmem,0,0,SRCCOPY);
::SelectObject(dcmem.m_hDC,hold);
delete pData;
DeleteObject(hbmp);

CString sos; //测试输出像素数组之一
sos.Format("%d",pData[1]);
AfxMessageBox(sos);
}


请高手指教~~~
...全文
533 10 打赏 收藏 转发到动态 举报
写回复
用AI写文章
10 条回复
切换为时间正序
请发表友善的回复…
发表回复
vampirem 2012-10-29
  • 打赏
  • 举报
回复
这是怎么回事啊~
vampirem 2012-10-29
  • 打赏
  • 举报
回复
这是什么情况?
szbwk1 2012-05-18
  • 打赏
  • 举报
回复
好不容易登陆上来看看问题的答案,什么也没有啊!
szbwk1 2012-05-18
  • 打赏
  • 举报
回复
晕,太可恶了
ffpffp 2008-05-21
  • 打赏
  • 举报
回复
谢谢ls啦,结帖~~~
yebeans 2008-05-21
  • 打赏
  • 举报
回复
jf~~^_^
ffpffp 2008-05-20
  • 打赏
  • 举报
回复
再顶一下吧~~
ffpffp 2008-05-19
  • 打赏
  • 举报
回复
顶起,那位朋友帮我看看~~~
ffpffp 2008-05-19
  • 打赏
  • 举报
回复
我需要获取图片每个点的rgb值,并保存在二位数组中,ls有办法么?
cnzdgs 2008-05-19
  • 打赏
  • 举报
回复
图象数据本身就是一个二维数组。

16,472

社区成员

发帖
与我相关
我的任务
社区描述
VC/MFC相关问题讨论
社区管理员
  • 基础类社区
  • Web++
  • encoderlee
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告

        VC/MFC社区版块或许是CSDN最“古老”的版块了,记忆之中,与CSDN的年龄几乎差不多。随着时间的推移,MFC技术渐渐的偏离了开发主流,若干年之后的今天,当我们面对着微软的这个经典之笔,内心充满着敬意,那些曾经的记忆,可以说代表着二十年前曾经的辉煌……
        向经典致敬,或许是老一代程序员内心里面难以释怀的感受。互联网大行其道的今天,我们期待着MFC技术能够恢复其曾经的辉煌,或许这个期待会永远成为一种“梦想”,或许一切皆有可能……
        我们希望这个版块可以很好的适配Web时代,期待更好的互联网技术能够使得MFC技术框架得以重现活力,……

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