hur.cn - 华软网

 热门搜索

基于MFC绘图后,在图片上拖动一个新建的对话框,很卡

  作者:未知    来源:网络    更新时间:2011/6/1
基于MFC绘图后,单击弹出一个对话框,在View的窗口(即所作图像)上拖动该对话框时,拖动很慢,甚至卡,有没有什么办法解决呢,求教?
---华软 网友回答---
看看你的OnDraw等绘制函数里都做了哪些消耗CPU的工作,比如循环之类的
---华软网友回复---
你的绘图是在哪里进行的?能看下代码不?
---华软网友回复---
我在OnDraw()里就调用了一个绘图函数DrawData(),这个函数是对一个20*360*460的数组进行逐点判断值的大小,然后根据每点的值再调用SetPixel函数来画图,感觉不麻烦啊
---华软网友回复---
这个数组很大啊,这么多的元素当然卡啊。大哥你做什么的,在每帧做这么多数据处理
---华软网友回复---
DrawData()的函数原型大概如下
//Data是存储数据的三维数组
//Datathreshold阈值的一维数组
//nClrInx代表在Datathreshold的第nClrInx个阈值大小
DrawData()
{
for(int i=0;i<20;i++)
{
for(int j=0;j<360;j++)
{
for(int k=0;k<460;k++)
{
int nClrInx = 0; 
while(Data[i][j][k]>Datathreshold[nClrInx])  
{
nClrInx++;

pDC->SetPixel(...);
}
}
}
}
---华软网友回复---
信号处理的,没办法,还有更大的数据呢
---华软网友回复---
不懂,友情帮顶。
---华软网友回复---
我可能每太理解lz的意思。
我的理是:你在View上不断地绘图,然后创建了窗口A,在View上拖动窗口A会卡

我绝得数据量不算大,相对于那些图像处理软件来说,这个数据量可以说挺小的了

但是lz的一个像素一个像素地显示方法有点低效,lz考虑这样,生成一个HBITMAP资源然后用BitBlt,这样应该会快点
---华软网友回复---
程序需要精简吧 太废内存了
---华软网友回复---
俺也觉得这么多数据用SetPixel画可能效率不高,LZ试试用OGL或者DX吧
---华软网友回复---
我用的就是双缓冲绘图,可我那数据必须要一个一个点判断,然后根据值的大小赋不同的颜色,除了SetPixel()函数外,我不知道还有什么函数可以实现这个功能
---华软网友回复---
我在想,在拖动窗口时,能不能让拖动的窗口变成类似悬浮窗口的那种,这样在图像上拖动窗口,两者就不影响了
---华软网友回复---
LZ可以试着用指针操作,那个SetPixel()实在是慢了。
---华软网友回复---
可以将双缓冲绘图的那张图片设为全局变量,只有修改图片的内容的时候再重新SetPixel,其他的时候直接bitblt
---华软网友回复---
指针操作是什么意思?

---华软网友回复---
“可以将双缓冲绘图的那张图片设为全局变量,只有修改图片的内容的时候再重新SetPixel,其他的时候直接bitblt” 这个是什么意思,能具体解释下吗?
---华软网友回复---
你可以这样做,首先,拖动窗口的时候肯定会引起重绘,你可以利用双缓冲把你在view中的内容放在一张图片中,在移动窗口的时候就不需要重绘,而只需要bitblt,然后invalidrect就不会卡了。
---华软网友回复---
如何在移动窗口时进行bitblt呢,是把bitblt写在OnDraw里吗
---华软网友回复---
1 不要在OnDraw中画和计算
2 使用多线程,在其他线程中话,计算,然后,将结果BLTBLT到PDC中就可以      
华软声明:本内容来自网络,如有侵犯您版权请来信指出,本站立即删除。