Chinaunix首页 | 论坛 | 博客
  • 博客访问: 513047
  • 博文数量: 92
  • 博客积分: 3146
  • 博客等级: 中校
  • 技术积分: 2314
  • 用 户 组: 普通用户
  • 注册时间: 2010-09-27 10:20
文章分类

全部博文(92)

文章存档

2014年(3)

2013年(17)

2012年(16)

2011年(22)

2010年(34)

分类: 嵌入式

2010-10-30 10:34:01

文章转载来自http://www.cuteqt.com/blog/?p=478&cpage=1#comment-3181,里面还有许多比较经典的例子,不妨大家多去看看
 

在Qt Labs Blog里提到了一个快速缩小大图片的方法, 而且作者说是“几乎所有图形程序员都知道的trick”。 大概因为笔者不是图形程序员的缘故, 对这个小技巧十分之陌生, 我想大家可能也有很大一部分人还不知道这个技巧, 特此memo, 希望对大家有用。

QImage提供了缩放图片的函数 scaled, 并且可以用参数指定”快速缩放(FastTransformation)”还是”平滑缩放(SmoothTransformation)”, 使用还是很方便的。 但是如果你用缩放函数去做大图片的缩略图可能会发现”快速缩放”得到的图片质量不佳, 而”平滑缩放”质量很好但速度欠佳, 特别是原图非常大的时候smoothscale简直就是个噩梦阿。 这里就可以使用被称为“Cheat Scaling”的缩小图片的技巧了, 那就是先使用”快速缩放”得到一个中等大小的图片以获得较快的缩放速度, 再使用”平滑缩放”缩小至需要的大小以获得较好的图片质量。

如下代码:
QImage result = img.scaled(800, 600).scaled(200, 150, Qt::IgnoreAspectRatio, Qt::SmoothTransformation);

一个公认比较好的方法是,先缩至缩略图4倍大小, 再进一步平滑缩放。 按照原作者的测试, 该算法甚至比“快速缩放”还要略快, 却能获得和“平滑缩放”极其接近的最终结果。(为什么会比“快速缩放”还快呢?我一直想不明白)

下面这个图片是性能测试的结果, bar越长证明越快哦~

另外下图是一个缩放效果的展示, 确实是非常令人满意的结果:

除了这样一个缩放的技巧, 原作者还介绍了另外一个缩放的方法, 叫做“快速减半法”, 原则就是“没有最快, 只有更快!”。

性能测试证明这个方法真是巨快无比, 如果对数学比较明白的同学一定要好好看看那篇文章。 不过笔者数学学的有点那个, 看不太懂, 所以这里就不详细解释该算法的原理了。 :)

如果能将两个算法合理结合, 定能打变天下无敌手, 值得大家学习学习。

阅读(4437) | 评论(0) | 转发(0) |
给主人留下些什么吧!~~