前些天碰到一个问题,读取avi在界面上显示感觉迟钝。显示一路画面时,图像并不迟钝;显示多路图像时
,明显感到时延。
查了一下原因:
原来是MFC下window的strechblt的显示效率问题。strechblt需要计算显示图像在显示屏的显示位置和大小
。如果原图和在显示器上显示图像大小不一致时,strechblt需要计算得到映射关系。因为此映射关系完全
由cpu负担,当cpu计算能力有限时,将造成显示迟钝。
解决方案是第一采用direct show,由显卡分担显示;第二是不拉伸图像,原图显示。cpu不计算映射关系;
第三,调节显示器分辨率,尽可能减少图像不成比例的拉伸。
附注:在裁剪图像时,抽横行效率要高于抽竖行,因为图像相当于两维数组,而其内存存储是一维形式,其
图像存储为行数据排列,这样对数据操作时,很明显,指针移动时行效率高于竖效率。