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

📄 subject_17304.htm

📁 一些关于vc的问答
💻 HTM
字号:
<p>
序号:17304 发表者:cmoth 发表日期:2002-10-10 11:05:33
<br>主题:为什么在内存中作的图都是黑白的?
<br>内容:我用下面的代码创建的内存设备环境:<BR><BR>&nbsp;&nbsp;&nbsp;&nbsp;CDC TempDC;<BR>&nbsp;&nbsp;&nbsp;&nbsp;TempDC.CreateCompatibleDC (pDC); <BR><BR>&nbsp;&nbsp;&nbsp;&nbsp;CBitmap TempBmp;<BR>&nbsp;&nbsp;&nbsp;&nbsp;CRect TempRect;<BR>&nbsp;&nbsp;&nbsp;&nbsp;GetClientRect(&TempRect);<BR>&nbsp;&nbsp;&nbsp;&nbsp;TempBmp.CreateCompatibleBitmap(&TempDC,TempRect.Width (),TempRect.Height ());<BR>&nbsp;&nbsp;&nbsp;&nbsp;TempDC.SelectObject (TempBmp);<BR><BR>如果在pDC上作图就正常,但在TempDC上作完图,然后用BitBlt函数拷贝到pDC上,总是黑白的,这是什么原因啊?<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>回复者:徐景周 回复日期:2002-10-10 11:17:15
<br>内容:参看一下:<BR>BOOL CRectToJpeg::CopyRectToBmp(<BR>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;CDC*&nbsp;&nbsp;&nbsp;&nbsp; pDC,<BR>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;CRect*&nbsp;&nbsp; pRectTgt,<BR>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;CBitmap* pBmp)<BR>{<BR>&nbsp;&nbsp;&nbsp;&nbsp;CDC&nbsp;&nbsp;&nbsp;&nbsp; memDC;<BR>&nbsp;&nbsp;&nbsp;&nbsp;CRect&nbsp;&nbsp; rectCli;<BR><BR>&nbsp;&nbsp;&nbsp;&nbsp;rectCli = *pRectTgt;<BR><BR>&nbsp;&nbsp;&nbsp;&nbsp;CRect rectN = rectCli;<BR>&nbsp;&nbsp;&nbsp;&nbsp;rectN.NormalizeRect();<BR><BR>&nbsp;&nbsp;&nbsp;&nbsp;//Need to adjust width and height a tad:<BR>&nbsp;&nbsp;&nbsp;&nbsp;//Try dividing by 0.96<BR>&nbsp;&nbsp;&nbsp;&nbsp;int tW = (int)((double)rectN.Width() /0.96);<BR>&nbsp;&nbsp;&nbsp;&nbsp;int tH = (int)((double)rectN.Height()/0.96);<BR><BR>&nbsp;&nbsp;&nbsp;&nbsp;rectCli.SetRect(rectCli.TopLeft().x,<BR>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;rectCli.TopLeft().y,<BR>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;rectCli.TopLeft().x+tW,<BR>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;rectCli.TopLeft().y-tH);<BR><BR>&nbsp;&nbsp;&nbsp;&nbsp;//Convert to DP<BR>&nbsp;&nbsp;&nbsp;&nbsp;pDC-&gt;LPtoDP(&rectCli);<BR><BR>&nbsp;&nbsp;&nbsp;&nbsp;//Make sure you are in a known mode<BR>&nbsp;&nbsp; int nOldMode = pDC-&gt;SetMapMode(MM_TEXT);<BR><BR>&nbsp;&nbsp;&nbsp;&nbsp;if (!memDC.CreateCompatibleDC(pDC))<BR>&nbsp;&nbsp;&nbsp;&nbsp;{<BR>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;m_csMsg = "Failed to create compatible dc";<BR>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;pDC-&gt;SetMapMode(nOldMode);<BR>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;return FALSE;<BR>&nbsp;&nbsp;&nbsp;&nbsp;}<BR><BR>&nbsp;&nbsp;&nbsp;&nbsp;int w = abs(rectCli.BottomRight().x - rectCli.TopLeft().x);<BR>&nbsp;&nbsp;&nbsp;&nbsp;int h = abs(rectCli.BottomRight().y - rectCli.TopLeft().y);<BR>&nbsp;&nbsp;&nbsp;&nbsp;int x = rectCli.TopLeft().x;<BR>&nbsp;&nbsp;&nbsp;&nbsp;int y = rectCli.TopLeft().y;<BR><BR>&nbsp;&nbsp;&nbsp;&nbsp;//Create bitmap of desired height and width<BR>&nbsp;&nbsp;&nbsp;&nbsp;if (!pBmp-&gt;CreateCompatibleBitmap(pDC,w,h))<BR>&nbsp;&nbsp;&nbsp;&nbsp;{<BR>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;m_csMsg = "Failed to create compatible bitmap";<BR><BR>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;pDC-&gt;SetMapMode(nOldMode);<BR>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;pBmp-&gt;DeleteObject();<BR>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;return FALSE;<BR>&nbsp;&nbsp;&nbsp;&nbsp;}<BR><BR>&nbsp;&nbsp;&nbsp;&nbsp;CBitmap* pOrigBmp = memDC.SelectObject(pBmp);<BR><BR>&nbsp;&nbsp;&nbsp;&nbsp;//Do a stretchblt here<BR>&nbsp;&nbsp;&nbsp;&nbsp;if (!memDC.StretchBlt(<BR>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;0,<BR>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;0,<BR>//&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;tW,<BR>//&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;tH,<BR>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;w,&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;//复制源图真实尺寸,不拉大。jingzhou xu<BR>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;h,<BR>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;pDC,<BR>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;x,<BR>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;y,&nbsp;&nbsp;<BR>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;w,<BR>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;h,<BR>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;SRCCOPY))<BR>&nbsp;&nbsp;&nbsp;&nbsp;{<BR>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;m_csMsg = "Failed to do bitblt into memory DC";<BR>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;pDC-&gt;SetMapMode(nOldMode);<BR>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;pBmp-&gt;DeleteObject();<BR>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;return FALSE;<BR>&nbsp;&nbsp;&nbsp;&nbsp;}<BR><BR>&nbsp;&nbsp;&nbsp;&nbsp;pDC-&gt;SetMapMode(nOldMode);<BR><BR>&nbsp;&nbsp;&nbsp;&nbsp;memDC.SelectObject(pOrigBmp);<BR><BR>&nbsp;&nbsp;&nbsp;&nbsp;return TRUE;<BR>}
<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 + -