获取灰度图的灰度值,存入二维数组

c415415 2011-12-08 02:07:56
LONG height;
LONG width;
LONG lLineBytes;
unsigned char* lpSrc;

LONG i;
LONG j;

CFile file;
LPSTR lpDIB;
LPSTR lpDIBBits;
HDIB hDib;



file.Open("c:\\101.bmp",CFile::modeRead);
hDib=::ReadDIBFile(file);
lpDIB=(LPSTR)::GlobalLock((HGLOBAL)hDib);
height=::DIBHeight(lpDIB);
width=::DIBWidth(lpDIB);
LONG s[1024][1280];
lpDIBBits=::FindDIBBits(lpDIB);
lLineBytes=WIDTHBYTES(width*8);
for (i = 0; i < height; i ++)
{
for (j = 0; j < width; j ++)
{
lpSrc = (unsigned char *)lpDIBBits + lLineBytes * i + j;
s[i][j]=*(lpSrc);
}
}
}
本人新手
这段代码错在哪里啊?
...全文
559 15 打赏 收藏 转发到动态 举报
写回复
用AI写文章
15 条回复
切换为时间正序
请发表友善的回复…
发表回复
c415415 2011-12-12
  • 打赏
  • 举报
回复
[Quote=引用 13 楼 gameslq 的回复:]

C/C++ code
LONG s[1024][1280];
改为
char s[1024][1280];
[/Quote]
谢谢。我用的是另外的方法。用new为数组获取了一下空间,就好了
_葫芦娃 2011-12-11
  • 打赏
  • 举报
回复
注意还要释放 GlobalLock锁定的。
gameslq 2011-12-10
  • 打赏
  • 举报
回复
LONG s[1024][1280];
改为
char s[1024][1280];
c415415 2011-12-10
  • 打赏
  • 举报
回复
[Quote=引用 11 楼 greatliudy123 的回复:]

引用 8 楼 eee2000 的回复:
这里错了
lpSrc = (unsigned char *)lpDIBBits + lLineBytes * i + j;

for(i =0 ; i < h; i++)
{
offset = i * w;
for(j = 0; j < w; j++)
{
img[i][j] = src[offset +j]
}
}

……
[/Quote]
我已经找到错误的地方了,并不是8楼那位兄台说的地方。我之前代码错在LONG s[1024][1280]这个地方。
greatliudy123 2011-12-09
  • 打赏
  • 举报
回复
[Quote=引用 8 楼 eee2000 的回复:]
这里错了
lpSrc = (unsigned char *)lpDIBBits + lLineBytes * i + j;

for(i =0 ; i < h; i++)
{
offset = i * w;
for(j = 0; j < w; j++)
{
img[i][j] = src[offset +j]
}
}
[/Quote]

和楼主的原来的代码实现的功能一样的?怎么看不明白,能给解释下么?
c415415 2011-12-08
  • 打赏
  • 举报
回复
[Quote=引用 8 楼 eee2000 的回复:]
这里错了
lpSrc = (unsigned char *)lpDIBBits + lLineBytes * i + j;

for(i =0 ; i < h; i++)
{
offset = i * w;
for(j = 0; j < w; j++)
{
img[i][j] = src[offset +j]
}
}
[/Quote]
很感谢。不过我不是很懂,请问一下,src[]是指的什么东西?
client_sz 2011-12-08
  • 打赏
  • 举报
回复
[Quote=引用 6 楼 c415415 的回复:]
引用 4 楼 client_sz 的回复:

多谢O(∩_∩)O

你谢我干嘛。我那个代码有错误,能指正一下么?
[/Quote]
因为我也正在学习中,呵呵,帮不了你什么忙。
eee2000 2011-12-08
  • 打赏
  • 举报
回复

这里错了
lpSrc = (unsigned char *)lpDIBBits + lLineBytes * i + j;

for(i =0 ; i < h; i++)
{
offset = i * w;
for(j = 0; j < w; j++)
{
img[i][j] = src[offset +j]
}
}
c415415 2011-12-08
  • 打赏
  • 举报
回复
[Quote=引用 5 楼 fengbingchun 的回复:]

直接用opencv或cximage实现简单
[/Quote]
先谢谢了。能分析一下这段代码错误的原因么?
c415415 2011-12-08
  • 打赏
  • 举报
回复
[Quote=引用 4 楼 client_sz 的回复:]

多谢O(∩_∩)O
[/Quote]
你谢我干嘛。我那个代码有错误,能指正一下么?
fengbingchun 2011-12-08
  • 打赏
  • 举报
回复
直接用opencv或cximage实现简单
client_sz 2011-12-08
  • 打赏
  • 举报
回复
多谢O(∩_∩)O
c415415 2011-12-08
  • 打赏
  • 举报
回复
[Quote=引用 2 楼 client_sz 的回复:]

弱弱的问一下,HDIB是函数库里面的还是你自己建的?
[/Quote]
自己建的,用何斌那本《visual c++数字图像处理》写的
client_sz 2011-12-08
  • 打赏
  • 举报
回复
弱弱的问一下,HDIB是函数库里面的还是你自己建的?
c415415 2011-12-08
  • 打赏
  • 举报
回复
那副101.bmp是1024*1280的

19,468

社区成员

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

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