看了20集孙鑫C++视频,但是却有更多的疑问

dafeifeijiji 2013-03-14 10:15:46
RGBQUAD  *lpRGBquad;
lpRGBquad = (RGBQUAD *)&lpDIB[sizeof(BITMAPINFOHEADER)];
if(::DIBNumColors(lpDIB) == 256) //256色位图不作任何处理
{
return TRUE;
}

if(::DIBNumColors(lpDIB) != 256) //非256色位图将它灰度化
{
lLineBytes = WIDTHBYTES(lWidth*8*3);
lpdest= new BYTE[lHeight*lWidth];
lpDIBBits = (LPSTR)lpDIB + sizeof(BITMAPINFOHEADER);//指向DIB象素
for(i = 0;i < lHeight; i++)
for(j = 0;j < lWidth*3; j+=3)
{
ired = (unsigned char*)lpDIBBits + lLineBytes * i + j + 2;
igreen = (unsigned char*)lpDIBBits + lLineBytes * i + j + 1;
iblue = (unsigned char*)lpDIBBits + lLineBytes * i + j ;
lpdest[i*lWidth + j/3] = (unsigned char)((*ired)*0.299 + (*igreen)*0.588 + (*iblue)*0.114);
}

LPBITMAPINFOHEADER lpBI;
lpBI = (LPBITMAPINFOHEADER)lpDIB;
lpBI->biBitCount = 8;

//设置灰度调色板
for(i = 0;i < 256;i++)
{
lpRGBquad[i].rgbRed = (unsigned char)i;
lpRGBquad[i].rgbGreen = (unsigned char)i;
lpRGBquad[i].rgbBlue = (unsigned char)i;
lpRGBquad[i].rgbReserved = 0;
}

lpNewDIBBits= ::FindDIBBits(lpDIB); //找到DIB图像象素起始位置
lLineBytes=WIDTHBYTES(lWidth * 8);
//修改灰度值
for(i = 0;i < lHeight; i++)
for(j = 0;j < lWidth; j++)
{
lpSrc = (unsigned char*)lpNewDIBBits + lLineBytes * i+ j ;
*lpSrc=lpdest[i*lWidth+j];
}
delete lpdest;
}
return true;
}



虽然浏览了一遍孙鑫的C++视频,但对于上面的代码我还是看得一头雾水,跟在大学学的C++有很大的差别,看到上面函数和指针,看得特别吃力很难懂。希望大家能够给我推荐一些方法或者书籍,好让我能够继续坚持走下去
...全文
3819 12 打赏 收藏 转发到动态 举报
AI 作业
写回复
用AI写文章
12 条回复
切换为时间正序
请发表友善的回复…
发表回复
nickfuryvip 2015-04-25
  • 打赏
  • 举报
回复
我感觉这段代码不难。旁边有人指点是最容易学的,我当时就是靠自己死钻。 你多多实践、学会调试就知道是怎么回事了。
hui211314dd 2013-12-13
  • 打赏
  • 举报
回复
其实代码主要就是把每个像素点按照(R值*0.299 + G值*0.588 + B值*0.114)得到最后的灰度值; 可以看下《Visual C++数字图像处理》孙什么英写的,前一两章有这个,也可以看下我的这个代码; http://download.csdn.net/detail/hui211314dd/6426385 希望对你有帮助;
hui211314dd 2013-12-13
  • 打赏
  • 举报
回复
看视频差不多就能吸收四分之一的知识,眼高手低,应该买本书静下来看看,写写,最好敲敲
dafeifeijiji 2013-03-15
  • 打赏
  • 举报
回复
引用 1 楼 dream238 的回复:
楼主贴出来的代码应该是处理图像位图相关代码,具体功能需要结合实际环境来了解为什么要这么写。 大学的C++,更多的是在基础算法学习和数据结构知识的学习。 而工作编程,更多的会接触到网络、图像、视频、业务知识等具有一定专业方向的东西,所以结合要解决的问题,也就会有各种开发工具以及能解决相应问题的功能库集合。 VC的话偏向windows编程,所以最好找windows相关的……
谢谢你的回复,这个是我的毕业设计,书上的代码看不懂,只有向各位大神请教。
dafeifeijiji 2013-03-15
  • 打赏
  • 举报
回复
引用 2 楼 bhybhybhy2 的回复:
最好的办法是身边有人可问,教你。
没人指教,学起来真的有点吃力
dafeifeijiji 2013-03-15
  • 打赏
  • 举报
回复
引用 6 楼 tiger9991 的回复:
应该区了解下位图结构就知道了
这个是灰度化算法,我从网上下载回来,只是自己没看懂,感觉自己在大学白学了几年
看不见的裂痕 2013-03-15
  • 打赏
  • 举报
回复
应该区了解下位图结构就知道了
看不见的裂痕 2013-03-15
  • 打赏
  • 举报
回复
在设置RGB的每一个像素值,有什么问题么?
abzhang2 2013-03-15
  • 打赏
  • 举报
回复
继续学习哦。 学无之境。
  • 打赏
  • 举报
回复
不是吧,最好是边用边学。
  • 打赏
  • 举报
回复
最好的办法是身边有人可问,教你。
ArcRain 2013-03-14
  • 打赏
  • 举报
回复
楼主贴出来的代码应该是处理图像位图相关代码,具体功能需要结合实际环境来了解为什么要这么写。 大学的C++,更多的是在基础算法学习和数据结构知识的学习。 而工作编程,更多的会接触到网络、图像、视频、业务知识等具有一定专业方向的东西,所以结合要解决的问题,也就会有各种开发工具以及能解决相应问题的功能库集合。 VC的话偏向windows编程,所以最好找windows相关的书籍进行入门,了解对应平台下的基础知识,然后由浅入深的学习平台SDK提供的各种类库来解决问题。 个人推荐楼主可以看《Windows 程序设计》以及《WINDOWS核心编程》,前者入门,后者深入。

19,473

社区成员

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

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