当前位置:  开发笔记 > 编程语言 > 正文

如何对图像进行高质量缩放?

如何解决《如何对图像进行高质量缩放?》经验,为你挑选了0个好方法。

我正在编写一些代码来缩放C/C++中的32位RGBA图像.我已经写过一些有些成功的尝试,但它们很慢,最重要的是尺寸图像的质量是不可接受的.

我比较了由OpenGL(即我的视频卡)和我的例程缩放的相同图像,它的质量相差几英里.我已经搜索了Google代码,搜索了我认为可以解决一些问题的源代码树(SDL,Allegro,wxWidgets,CxImage,GD,ImageMagick等),但通常他们的代码要么是错综复杂的,要么分散在各处或者是谜语汇编程序,很少或没有评论.我还阅读了维基百科和其他地方的多篇文章,我只是没有找到我需要的明确解释.我理解插值和采样的基本概念,但我很难让算法正确.我不想依赖外部库来完成一个例程,并且必须转换为它们的图像格式并返回.此外,无论如何,我想知道如何自己做.:)

我之前看过一个关于堆栈溢出问题的类似问题,但它并没有真正以这种方式回答,但我希望有人可以帮我推动我朝着正确的方向前进.也许指点我一些文章或伪代码......任何可以帮助我学习和做的事情.

这是我正在寻找的:

    没有汇编程序(我正在为多种处理器类型编写非常可移植的代码).

    没有外部库的依赖.

    我主要关注的是缩放DOWN,但是稍后还需要编写一个扩展例程.

    结果的质量和算法的清晰度是最重要的(我可以在以后优化它).

我的例程基本上采用以下形式:

DrawScaled(uint32 *src, uint32 *dst, 
      src_x, src_y, src_w, src_h, 
      dst_x, dst_y, dst_w, dst_h );

谢谢!

更新:为了澄清,我需要一些比盒子重新采样更先进的东西用于降尺度,这会使图像模糊不清.我怀疑我想要的是某种双三次(或其他)滤波器,它与双三次升频算法有些相反(即每个目标像素都是从所有贡献的源像素计算出来的,并结合了保持锐利的加权算法.

这是我从wxWidgets BoxResample算法得到的例子与我想要的256x256位图缩放到55x55的例子.

www.free_image_hosting.net/uploads/1a25434e0b.png

最后:

www.free_image_hosting.net/uploads/eec3065e2f.png

原始的256x256图像

推荐阅读
跟我搞对象吧
这个屌丝很懒,什么也没留下!
DevBox开发工具箱 | 专业的在线开发工具网站    京公网安备 11010802040832号  |  京ICP备19059560号-6
Copyright © 1998 - 2020 DevBox.CN. All Rights Reserved devBox.cn 开发工具箱 版权所有