📄 subject_34576.htm
字号:
<p>
序号:34576 发表者:罗兹维尔 发表日期:2003-03-31 16:13:07
<br>主题:不说兄,有问题请教
<br>内容:http://www.vchelp.net/cndevforum/subject_view.asp?subject_id=34168&forum_id=<BR><BR><BR>我怎么建立这样一个动态的二维数组呢?<BR><BR>只有CDC::GetPixel()方法吗?
<br><a href="javascript:history.go(-1)">返回上页</a><br><a href=http://www.copathway.com/cndevforum/>访问论坛</a></p>
<hr size=1>
<blockquote><p>
回复者:韩风 回复日期:2003-03-31 16:34:09
<br>内容:二维数组就可以看成是一维的<BR>new BYTE[M*N]即可<BR><BR>GetPixel()可以,但不是每种设备都支持,而且比较慢<BR><BR>可以试试下面的代码:<BR><BR> //抓图(640*480)<BR> CDC memDC;<BR> memDC.CreateCompatibleDC(m_pDC);<BR><BR> CBitmap bm;<BR> CRect rect(-320,-240,320,240);<BR><BR> CSize sz(640,480);<BR> bm.CreateCompatibleBitmap(m_pDC,sz.cx,sz.cy);<BR> CBitmap *oldbm =memDC.SelectObject(&bm);<BR> memDC.BitBlt(0,0,sz.cx,sz.cy,m_pDC,0,0,SRCCOPY);<BR><BR> BITMAP bmp;<BR> bm.GetBitmap(&bmp);<BR><BR> //非32位真彩<BR> if(bmp.bmBitsPixel != 32)<BR> {<BR><BR> return FALSE;<BR> }<BR><BR> bm.GetBitmapBits(640*480*4,pData);<BR><BR>这就相当于调用640*480次GetPixel()
<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-03-31 17:23:12
<br>内容:DWORD GetBitmapBits(<BR> DWORD dwCount,<BR> LPVOID lpBits <BR>) const;<BR><BR>lpBits <BR>Points to the buffer that is to receive the bitmap. The bitmap is an array of bytes. The bitmap byte array conforms to a structure where horizontal scan lines are multiples of 16 bits. <BR><BR>你的pData是指针吗?什么类型的?<BR>我定义了 <BR>BITMAP bm;<BR>COLORREF* colorarr=new COLORREF[bm.bmWidth*bm.bmHeight];<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>
<font color=red>答案被接受</font><br>回复者:韩风 回复日期:2003-04-01 08:56:34
<br>内容:BYTE *pData;<BR>pData=new BYTE[ bm.bmWidth*bm.bmHeight ];<BR><BR>上面的例子是640*480
<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-04-01 13:23:03
<br>内容:再问一个问题<BR><BR>pData=new BYTE[ bm.bmWidth*bm.bmHeight ];<BR>是按什么顺序传送象素给pData的?<BR>就是pData[0],pData[1],pData[2]..........<BR>在BMP中是什么坐标点的象素?
<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-04-01 14:01:27
<br>内容:如果你抓的是客户区<BR>(0,0,640,480)<BR>那么是从左下到右上的顺序<BR>你可以以行为单位交换一下(也就是每次640个字节拷贝)<BR>第0行和第479行<BR>第1行和第478行<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>
回复者:罗兹维尔 回复日期:2003-04-01 15:06:34
<br>内容:COLORREF* colorarr;<BR>colorarr=new COLORREF[bm.bmWidth*bm.bmHeight];<BR>for(int cy=0;cy<bm.bmHeight;cy++)<BR> for(int cx=0;cx<bm.bmWidth;cx++)<BR> colorarr[cx+cy*bm.bmHeight]=RGB(0,0,255);<BR><BR>然后<BR>pbmp->SetBitmapBits(bm.bmWidth*bm.bmHeight*sizeof(COLORREF),colorarr);<BR><BR>这样应该是变成全蓝的<BR>怎么会是灰色的一条一条的东西?<BR>难道还是按byte存储的?<BR>COLORREF是DWORD的呀<BR><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>
回复者:韩风 回复日期:2003-04-01 16:06:04
<br>内容:有可能是你的文件头错了<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 + -