请问如何将一张1280*720的图片改成160*120的大小而又不让图片失真呢?

解决方案 »

  1.   

    完全不失真不可能,用重采样。
    选择适当的采样函数,双线性内插或者双三次卷积。或者构造合适曲面拟合。但不可能不失真的,除非你写出sinc函数。根据采样理论,选取合适的采样间隔(小于1/2f),并且影像中无大于f的频谱成分,可以恢复原始影像。即假定160*120是原始,1280是变换后影像,可以根据采样函数回复160*120,这样就不会失真。但是sinc函数作为卷积核基本没有用于实际,这是理论上的。实际都用一些别的函数代替其作为卷积核。
    双线性内插用的1-|X|。
      

  2.   

    使用gdi+Image* pSrc = new Image(strFile);
    Image* pDst = new Image(160,120);
    Graphics gph(pDst);
    gph.DrawImage(pSrc, 0, 0, 160, 120);
    pDst->Save(....)
      

  3.   

    我的看法和你有点不同,我认为失真主要是体现在边界信息上。我写的三个软件,其需求完全不同,但是都在不同的程度上对边界进行了处理。如果我们能够在缩小和放大时均针对物体的边界进行有效处理,可能效果会比直接计算要好得多。
    http://blog.csdn.net/zhoujk/archive/2009/05/20/4204741.aspx
    [原创]图像降噪 当前点周围指定范围内的反差作为运算强度的标准。
    http://blog.csdn.net/zhoujk/archive/2008/07/16/2663359.aspx
    [原创]图像算法 图像自动锐化(聚焦)同上,只是算法不同。
    http://blog.csdn.net/zhoujk/archive/2009/02/18/3903511.aspx
    [原创]图像算法:自动抠底,在返回杰背景层的边界后,专门使用一系统图像优化算法,对边界进行处理,同时防止头发丝之类的细节被错误清除,还要清除因压缩过度而造成的错误边界。
      

  4.   

    要自己定一种格式,矢量。好像MS就有,貌似是WMF什么的,忘了。用一般的JPG BMP实现不了