将一副图片全屏显示时,考虑到显示的效果美观,对图片的显示位置进行了计算(计算最佳位置)
其中RC_WIDTH为显示区域的宽度,RC_HEIGHT为显示区域的高度
PIC_WIDTH,PIC_HEIGHT分别为图片的宽度和高度
m_rcThumbnail为最终的显示区域
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秒左右。
各位有什么建议没啊?
其中RC_WIDTH为显示区域的宽度,RC_HEIGHT为显示区域的高度
PIC_WIDTH,PIC_HEIGHT分别为图片的宽度和高度
m_rcThumbnail为最终的显示区域
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秒左右。
各位有什么建议没啊?
long CxImage::Draw ( HDC hMemdc, // 这里用一个MemDC,画到一个内存位图中。
const RECT & rect,
RECT * pClipRect = NULL,
bool bSmooth = false //此参数置为TRUE为平滑处理
)以后就直接用这个内存位图往屏幕上贴(BitBlt)就行了。
你对双线性插值算法熟悉吗? 可以实现去锯齿吗?