将一副图片全屏显示时,考虑到显示的效果美观,对图片的显示位置进行了计算(计算最佳位置)
其中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秒左右。
 各位有什么建议没啊?

解决方案 »

  1.   

    是说把你的平滑处理放到内存里:
    long CxImage::Draw ( HDC hMemdc,  // 这里用一个MemDC,画到一个内存位图中。
      const RECT & rect,   
      RECT * pClipRect = NULL,   
      bool bSmooth = false //此参数置为TRUE为平滑处理
     )以后就直接用这个内存位图往屏幕上贴(BitBlt)就行了。
      

  2.   

    > 而且那样的话每张图片都要对应一个MemDC,我是在想能平滑处理的速度能不能快点?
      

  3.   

    在MemDC里画完以后,可以通过SelectObject(pOldBitmap)把画好的Bitmap换出来,然后就可以DeleteDC了,下次贴图的时候再重新生成MemDC。不过不管怎么说,每张图片都要对应一个hBitmap是起码的。至于说平滑处理的速度能不能快点,那看你的算法如何了,但要说3~5秒实在有点夸张,要么你的CPU是20年前的古董,要么你的图像有100000 * 100000这么大,如果都不是的话,我就不太明白这3~5秒时间都去干什么了?
      

  4.   

    > 谢谢xxd_qd的回复,我们的设备是嵌入式设备,硬件条件肯定是不同于PC机的。
      你对双线性插值算法熟悉吗? 可以实现去锯齿吗?
      

  5.   

    > xxd_qd 可否留下个联系方式。