📄 subject_64471.htm
字号:
<p>
序号:64471 发表者:晴天雨 发表日期:2003-12-10 22:11:00
<br>主题:关于24位图输出
<br>内容: 我在编写重画24位位图文件时遇到了一个问题清高人指点。<BR> 在 OnPaint()函数中加入如下代码,VC6.0 编译通过,但发现在更换不同的24位<BR>位图文件输出的效果却不一样,有的可以正确输出,而有的则输出的颜色失真并且<BR>图形成为斜状(有了一定角度)请教高手这种现象是什么造成的。<BR><BR>***************************************************************<BR>CPaintDC dcp(this);<BR>CFile cf; //文件变量,用来对文件操作<BR>CFileException e; //出错处理<BR>BITMAPFILEHEADER bmfh; //BMP文件头变量<BR>BITMAPV4HEADER bmih; //BMP文件信息变量<BR><BR>RGBTRIPLE *rgb; //24位真彩色数据格式<BR>char szFilename[200]; //文件名变量<BR><BR>_getcwd(szFilename,_MAX_PATH); //获取当前工作目录<BR>_chdir(szFilename); //进入当前工作目录<BR>strcat(szFilename,"\\res\\仿真数据录入界面.bmp"); <BR><BR>if (!cf.Open(szFilename,CFile::modeRead | CFile::typeBinary, &e)) //打开文件<BR>{<BR> MessageBox("不能打开这个文件!","提示");<BR> return;<BR>}<BR>cf.SeekToBegin();<BR>cf.Read(&bmfh,sizeof(bmfh)); //读取文件头<BR>cf.Read(&bmih,sizeof(bmih)); //读取文件信息头<BR>rgb = new RGBTRIPLE[cf.GetLength()];<BR>cf.SeekToBegin();<BR>cf.Seek(0,CFile::begin);<BR><BR>//读取文件数据<BR>if (cf.GetLength() > 64*1024)<BR>{<BR> cf.ReadHuge(rgb,bmih.bV4Width*bmih.bV4Height*3);//<BR>}<BR>else<BR>{<BR> cf.Read(rgb,bmih.bV4Width*bmih.bV4Height);<BR>}<BR><BR>//在屏幕上打点显示图像<BR>for (int i=0; i<bmih.bV4Height;i++)<BR>{<BR> for (int j=0; j<bmih.bV4Width; j++)<BR> {<BR><BR> //在指定的位置输出<BR> dcp.SetPixel(300+j,(bmih.bV4Height+180-i),RGB(rgb[(i*bmih.bV4Width+j)].rgbtRed,rgb[(i*bmih.bV4Width+j)].rgbtGreen,rgb[(i*bmih.bV4Width+j)].rgbtBlue));<BR> }<BR>}<BR>cf.Close();//关闭文件<BR>delete rgb;//释放内存<BR>
<br><a href="javascript:history.go(-1)">返回上页</a><br><a href=http://www.copathway.com/cndevforum/>访问论坛</a></p>
<hr size=1>
<blockquote><p>
<font color=red>答案被接受</font><br>回复者:bbsbbs2003 回复日期:2003-12-10 22:25:39
<br>内容:bmp的位图是双字对齐的<BR>对于24位图象, 排列是这样的<BR>bgr. //位图宽度为1象素, 需要占用4个字节<BR>bgrbgr.. //位图宽度为2象素, 需要占用8个字节<BR>bgrbgrbgr... //位图宽度为3个象素, 需要占用12个字节<BR>//上面的...表示为了双字对齐而使用的填充字节
<br>
<a href="javascript:history.go(-1)">返回上页</a><br><a href=http://www.copathway.com/cndevforum/>访问论坛</a></p></blockquote>
<hr size=1>
<blockquote><p>
回复者:bbsbbs2003 回复日期:2003-12-10 22:28:57
<br>内容:bgrbgrbgrbgr //位图宽度为4个象素, 需要占用12个字节, 刚好双字对齐, 显示正常
<br>
<a href="javascript:history.go(-1)">返回上页</a><br><a href=http://www.copathway.com/cndevforum/>访问论坛</a></p></blockquote>
<hr size=1>
<blockquote><p>
回复者:晴天雨 回复日期:2003-12-10 22:41:09
<br>内容:bbsbbs2003 你好,是不是我在调用位图文件时应当在循环中把位图的间隔计算出来,能给一个具体的事例吗?
<br>
<a href="javascript:history.go(-1)">返回上页</a><br><a href=http://www.copathway.com/cndevforum/>访问论坛</a></p></blockquote>
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -