关于图像放大的算法编程(请熟悉Windows 编程的高手进)

来源:百度知道 编辑:UC知道 时间:2024/05/16 10:18:16
本人用VC++语言实现了图像缩放的程序,算法是自己写的,类似三次立方插值的方法,计算量也不大,在计算一个点大概需要用几次整型加法,乘法,很几次函数调用(自己写的函数),但遇到一个很大困惑,就是运行速度很慢(估计有60-100倍,统计是在放大1600x1200 水平竖直各四倍)与Photoshop或类似的图片处理软件相比.

本人对C++相当了解,但基于windows编程不是很熟悉,想请问有高手知道类似的windows图像处理软件是怎么做scaler的吗?用什么编成方法与思路?
补充:1维缩放算法就算算法再优秀,也需要做逐个点的插值计算,以1600x1200为例子,循环至少需要1600x1200个,如果要调用程序里的函数的话就会很慢,哪怕你的函数再简单,这就是我想问的是有什么基于windows的编成方法我不知
我在MFC里做了一个测试,如果仅只调用一个系统涵数floor() 在2000x2000x5的循环里已经是非常的慢的,我觉得这个速度已经与photoshop全部处理的时间差不多了.
注释:2000x2000是图像的resolution.

不理解你说的MFC循环一次在1250 ~ 1300 毫秒之间是什么意思,可以具体一些吗,你是说你的插值运算一次要1250毫秒吗?那就是1.25秒,??
我的算法里没有一个除法,全部是整型的乘法与加法,与移位。做scale分块没有什么意义,

为了继续提高速度,我可以把所有对点操作全部用汇编写, 还可以自己开发函数,不用系统函数,节约函数调用时间,但我估计速度最多提升100%-200%,可现在我比photoshop的要慢2个数量级,
有谁知道他们是怎么实现的吗,还是他们有调用硬件资源来帮他们算?

我的MFC循环一次在1250 ~ 1300 毫秒之间
改变算法吧,
比如少用除法,少用双精度
改变结构吧,
比如图像分块,多线程处理

你刚才说的图片PS要2秒才能完成(你是不是把显示的缩放和物理的缩放搞混了?)。你的要2-3分钟?怎么可能呢?没有这么慢吧。

我觉得倒不如用现成的Blt函数,可以实现缩放传递。不仅速度快,还支持透明位图缩放等。如果能用DirectX,那就更好了,可以使用硬件级的Blt,速度绝对快。

跟windows编程无关,还是要看你的算法。