VC图像处理的问题
时间:2010-08-10
来源:互联网
将一副图片全屏显示时,考虑到显示的效果美观,对图片的显示位置进行了计算(计算最佳位置)
其中RC_WIDTH为显示区域的宽度,RC_HEIGHT为显示区域的高度
PIC_WIDTH,PIC_HEIGHT分别为图片的宽度和高度
m_rcThumbnail为最终的显示区域
C/C++ code
if (RC_WIDTH < RC_HEIGHT) { long h = (long)(RC_HEIGHT - PIC_HEIGHT/(PIC_WIDTH/(RC_WIDTH*1.0)))>>1; h = h>0?h:0; m_rcThumbnail.left = 0; m_rcThumbnail.right = m_rcShow.right - m_rcShow.left; m_rcThumbnail.top = 0 + h; m_rcThumbnail.bottom = m_rcShow.bottom - m_rcShow.top - h; } else { long w = (long)(RC_WIDTH - PIC_WIDTH/(PIC_HEIGHT/(RC_HEIGHT*1.0)))>>1; w = w>0?w:0; m_rcThumbnail.top = 0; m_rcThumbnail.bottom = m_rcShow.bottom - m_rcShow.top; m_rcThumbnail.left = 0 + w; m_rcThumbnail.right = m_rcShow.right - m_rcShow.left - w; }问题:
用这种算法计算并显示图片后,显示的图片出现了毛边,大家有什么办法吗?
用了CxImage的平滑处理,
long CxImage::Draw ( HDC hdc,
const RECT & rect,
RECT * pClipRect = NULL,
bool bSmooth = false //此参数置为TRUE为平滑处理
)
用了后效果要好很多,但是速度其慢,显示图片大概要3-5秒左右。
各位有什么建议没啊?
作者: love514425 发布时间: 2010-08-10
作者: dirdirdir3 发布时间: 2010-08-10
不是经常变化的话,可以考虑先计算好了存放在内存中,然后每次需要的时候直接画............................
嗯,放到内存中也会出现毛边啊。
作者: love514425 发布时间: 2010-08-10
作者: love514425 发布时间: 2010-08-10
long CxImage::Draw ( HDC hMemdc, // 这里用一个MemDC,画到一个内存位图中。
const RECT & rect,
RECT * pClipRect = NULL,
bool bSmooth = false //此参数置为TRUE为平滑处理
)
以后就直接用这个内存位图往屏幕上贴(BitBlt)就行了。
作者: xxd_qd 发布时间: 2010-08-10
是说把你的平滑处理放到内存里:
long CxImage::Draw ( HDC hMemdc, // 这里用一个MemDC,画到一个内存位图中。
const RECT & rect,
RECT * pClipRect = NULL,
bool bSmooth = false //此参数置为TRUE为平滑处理
)
以后就直接用这个内存位图往屏幕上贴(B……
那第一次也会慢啊。
作者: love514425 发布时间: 2010-08-10
作者: love514425 发布时间: 2010-08-10
作者: love514425 发布时间: 2010-08-10
> 而且那样的话每张图片都要对应一个MemDC,我是在想能平滑处理的速度能不能快点?
在MemDC里画完以后,可以通过SelectObject(pOldBitmap)把画好的Bitmap换出来,然后就可以DeleteDC了,下次贴图的时候再重新生成MemDC。不过不管怎么说,每张图片都要对应一个hBitmap是起码的。
至于说平滑处理的速度能不能快点,那看你的算法如何了,但要说3~5秒实在有点夸张,要么你的CPU是20年前的古董,要么你的图像有100000 * 100000这么大,如果都不是的话,我就不太明白这3~5秒时间都去干什么了?
作者: xxd_qd 发布时间: 2010-08-10
引用 6 楼 love514425 的回复:
> 而且那样的话每张图片都要对应一个MemDC,我是在想能平滑处理的速度能不能快点?
在MemDC里画完以后,可以通过SelectObject(pOldBitmap)把画好的Bitmap换出来,然后就可以DeleteDC了,下次贴图的时候再重新生成MemDC。不过不管怎么说,每张图片都要对应一个hBitmap是起码的。
至于说平滑处理的速……
> 谢谢xxd_qd的回复,我们的设备是嵌入式设备,硬件条件肯定是不同于PC机的。
你对双线性插值算法熟悉吗? 可以实现去锯齿吗?
作者: love514425 发布时间: 2010-08-10
热门阅读
-
office 2019专业增强版最新2021版激活秘钥/序列号/激活码推荐 附激活工具
阅读:74
-
如何安装mysql8.0
阅读:31
-
Word快速设置标题样式步骤详解
阅读:28
-
20+道必知必会的Vue面试题(附答案解析)
阅读:37
-
HTML如何制作表单
阅读:22
-
百词斩可以改天数吗?当然可以,4个步骤轻松修改天数!
阅读:31
-
ET文件格式和XLS格式文件之间如何转化?
阅读:24
-
react和vue的区别及优缺点是什么
阅读:121
-
支付宝人脸识别如何关闭?
阅读:21
-
腾讯微云怎么修改照片或视频备份路径?
阅读:28