| 发表于: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(); |
|
|
|
|