📄 subject_58202.htm
字号:
<p>
序号:58202 发表者:苦头陀+黄蜂 发表日期:2003-10-30 16:59:25
<br>主题:怎么提高显示位图的速度啊?
<br>内容:我开启两个线程,一个是用来产生位图的数据,另外一个装配到MemDC并促发WM_PAINT显示。可是很慢。尤其是我的位图是600*600大小的。<BR>
<br><a href="javascript:history.go(-1)">返回上页</a><br><a href=http://www.copathway.com/cndevforum/>访问论坛</a></p>
<hr size=1>
<blockquote><p>
回复者:米罗 回复日期:2003-10-30 17:05:12
<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>
回复者:littlebear 回复日期:2003-10-30 17:31:50
<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-10-30 21:38:58
<br>内容:是不是应该先绘制好下幅图,暂时放在内存里,等PAINT时直接调用
<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-10-31 09:13:21
<br>内容:谢谢大家,基本简单写就是这样的:<BR>定义肯定没错,就是显示慢!<BR>CDC *pDC=..<BR>CDC MemDC=createcompatibleDC()<BR>CBitmap *pbitmap=createcompatiblebitmap(..)<BR>MemDC->SelectObject(pbitmap)<BR>...<BR><BR>SamplingProc()<BR>{<BR> 对数组直接赋值memset,实际过程中是采集赋值CapturetoMem<BR>}<BR>ShowProc<BR>{<BR> 对memDC->setpixel(point,R,G,B);<BR> 完了之后给窗口发消息,Postmessage(UDM_SHOWONEFRAME,..),<BR>}<BR>OnShowOneFrame()<BR>{<BR> Invalidate(Rect,FALSE);<BR>}<BR>慢的程度,大概是每秒一帧。数组大小为552*552的一维数组,在显示的时候所以逐点赋值给memDC.<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-11-06 17:05:24
<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-11-07 00:32:40
<br>内容:<BR>怎么用setpixel(point,R,G,B)呀,这种语句很慢的。如果是批量采集数据,就直接创建成位图。如果是要采集一个数据就显示出来那就直接在显示DC上用setpixel(point,R,G,B)画,不要用MemDC,也不要在OnDraw或OnPaint中画,那要等到积累到一定无效区才画的,并且为了一个数据去触发重画能不慢吗?懂我的意思了吧。
<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-11-10 15:44:02
<br>内容:那样会闪烁的呢!我就是为了避免闪烁才用MEMDC的。<BR>我就是采集的位图,然后想显示。<BR>setpixel不也很慢么?
<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-11-10 18:34:38
<br>内容: 你先把的采集到的数据,按DIB位图的数据格式进行组织。DIB位图信息放在m_pBmih中,DIB位图数据放在m_pBits,然后:<BR> 方法1.用如下函数创建为DDB位图再操作。<BR> HBITMAP hBitmap = ::CreateDIBitmap(pDC->GetSafeHdc(), m_pBmih,<BR> CBM_INIT, m_pBits, (LPBITMAPINFO) m_pBmih, DIB_RGB_COLORS);<BR> ASSERT(hBitmap != NULL);<BR> 方法2.直接显示。<BR> pDC->SetStretchBltMode(COLORONCOLOR);<BR> ::StretchDIBits(pDC->GetSafeHdc(), origin.x, origin.y, size.cx, size.cy,<BR> 0, 0, m_pBmih->biWidth, m_pBmih->biHeight,<BR> m_pBits, (LPBITMAPINFO) m_pBmih, DIB_RGB_COLORS, SRCCOPY);<BR>另:<BR>不要用SetPixel函数去一个象素一个象素的设置,一幅图要调用600*600=360,000次能不慢吗?<BR>如果是接收一个数据就显示一个数据,那用SetPixel函数是很合适的,但要直接在屏幕上用SetPixel函数。那个象素变了就更新哪个象素,怎么会闪烁呢?<BR>2003-11-10 18:35:59
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -