⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 subject_64471.htm

📁 vc
💻 HTM
字号:
<p>
序号:64471 发表者:晴天雨 发表日期:2003-12-10 22:11:00
<br>主题:关于24位图输出
<br>内容:&nbsp;&nbsp; 我在编写重画24位位图文件时遇到了一个问题清高人指点。<BR>&nbsp;&nbsp; 在 OnPaint()函数中加入如下代码,VC6.0 编译通过,但发现在更换不同的24位<BR>位图文件输出的效果却不一样,有的可以正确输出,而有的则输出的颜色失真并且<BR>图形成为斜状(有了一定角度)请教高手这种现象是什么造成的。<BR><BR>***************************************************************<BR>CPaintDC dcp(this);<BR>CFile cf; //文件变量,用来对文件操作<BR>CFileException e; //出错处理<BR>BITMAPFILEHEADER bmfh; //BMP文件头变量<BR>BITMAPV4HEADER&nbsp;&nbsp;&nbsp;&nbsp;bmih; //BMP文件信息变量<BR><BR>RGBTRIPLE *rgb; //24位真彩色数据格式<BR>char szFilename[200]; //文件名变量<BR><BR>_getcwd(szFilename,_MAX_PATH); //获取当前工作目录<BR>_chdir(szFilename); //进入当前工作目录<BR>strcat(szFilename,&#34;\\res\\仿真数据录入界面.bmp&#34;);&nbsp;&nbsp; <BR><BR>if (!cf.Open(szFilename,CFile::modeRead | CFile::typeBinary, &amp;e)) //打开文件<BR>{<BR>&nbsp;&nbsp;&nbsp;&nbsp;MessageBox(&#34;不能打开这个文件!&#34;,&#34;提示&#34;);<BR>&nbsp;&nbsp;&nbsp;&nbsp;return;<BR>}<BR>cf.SeekToBegin();<BR>cf.Read(&amp;bmfh,sizeof(bmfh)); //读取文件头<BR>cf.Read(&amp;bmih,sizeof(bmih)); //读取文件信息头<BR>rgb = new RGBTRIPLE[cf.GetLength()];<BR>cf.SeekToBegin();<BR>cf.Seek(0,CFile::begin);<BR><BR>//读取文件数据<BR>if (cf.GetLength() &gt; 64*1024)<BR>{<BR>&nbsp;&nbsp;&nbsp;&nbsp;cf.ReadHuge(rgb,bmih.bV4Width*bmih.bV4Height*3);//<BR>}<BR>else<BR>{<BR>&nbsp;&nbsp;&nbsp;&nbsp;cf.Read(rgb,bmih.bV4Width*bmih.bV4Height);<BR>}<BR><BR>//在屏幕上打点显示图像<BR>for (int i=0; i&lt;bmih.bV4Height;i++)<BR>{<BR>&nbsp;&nbsp; for (int j=0; j&lt;bmih.bV4Width; j++)<BR>&nbsp;&nbsp; {<BR><BR>&nbsp;&nbsp;&nbsp;&nbsp;//在指定的位置输出<BR>&nbsp;&nbsp;&nbsp;&nbsp; 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>&nbsp;&nbsp; }<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.&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; //位图宽度为1象素, 需要占用4个字节<BR>bgrbgr..&nbsp;&nbsp; //位图宽度为2象素, 需要占用8个字节<BR>bgrbgrbgr...&nbsp;&nbsp;//位图宽度为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&nbsp;&nbsp;//位图宽度为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 + -