您的位置:程序门 -> vc/mfc -> 图形处理/算法



真彩图象到灰度图,编译通过了,可是出现了问题


[收藏此页] [打印本页]选择字色:背景色:字体:[][][]


真彩图象到灰度图,编译通过了,可是出现了问题
发表于:2007-08-14 18:49:38 楼主
大家好,我已经把bmp格式的文件读进了内存,在转灰度的时候,编译通过了,但是按下 "转换 "键,没有任何的反应,大家帮我看看程序,谢谢!


                  cpicture0doc*   pdoc   =   getdocument(); //获取文档
lpstr   lpdib;//指向dib的指针
lpdib   =   (lpstr)   ::globallock((hglobal)   pdoc-> gethdib());//锁定dib
beginwaitcursor(); //更改光标形状
lpstr   lpdibbits;//指向dib象素指针
byte*   lpsrc;
unsigned   char   i;
long   j;
long   lwidth;
long   lheight;
long   llinebytes;//图象每行的字节数
byte   bmap[256];//灰度影射表
lpbitmapinfo   lpbmi;
bool   bwinstyledib;
lpbmi   =   (lpbitmapinfo)lpdib;
for(i=0;i <256;i++)
{
bmap[i]   =   (byte)(0.299   *   lpbmi-> bmicolors[i].rgbred+   0.587   *   lpbmi-> bmicolors[i].rgbgreen+ 0.114   *   lpbmi-> bmicolors[i].rgbblue+0.5);
lpbmi-> bmicolors[i].rgbblue=
lpbmi-> bmicolors[i].rgbgreen=
lpbmi-> bmicolors[i].rgbred=byte(i);
}

//读取原来位图的r,g,b
lpdibbits   =   ::finddibbits(lpdib);//找到dib图象象素的起始位置
lwidth   =   ::dibwidth(lpdib);//获取象素宽度
lheight   =   ::dibheight(lpdib);//获取象素高度
llinebytes   =   widthbytes(lwidth   *   8);//计算图象每行的字节数
for(i   =   0;   i   <   lheight;   i++)
{
for(j   =   0;   j   <   lwidth;   j++)
  {
      lpsrc   =   (unsigned   char*)lpdibbits   +   llinebytes   *   (lheight   -   1   -
j)   +   j;
*lpsrc   =   bmap[*lpsrc];
  }
}
pdoc-> getdocpalette();
pdoc-> setmodifiedflag(true);
pdoc-> updateallviews(null);
::globalunlock((hglobal)   pdoc-> gethdib());
endwaitcursor();
发表于:2007-08-15 15:06:191楼 得分:0
真的没反应么,把窗口最小化再最大化也没反应么?
还有就是这代码是不是有问题,感觉好粗暴哦
发表于:2007-08-15 15:12:442楼 得分:0
晕晕,你这个有调色板的,都改了调色板了,你数据那里就不用改了```
发表于:2007-08-15 15:41:443楼 得分:0
我现在也发现楼上提的问题了,我把读取r,g,b的值代入了计算公式gray=0.299r+0.587g+0.114b
然后怎么把这个数据传给新的调色版呢?
谢谢大家!
发表于:2007-08-30 09:54:404楼 得分:0
同样的方法变换下就可以了。
发表于:2007-08-30 14:17:355楼 得分:0
建议你看一下 < <vc.net数字图像处理实例与解析> >   清华大学的
里面有完全的代码,看懂了就可以解决你的问题了!!


快速检索

最新资讯
热门点击