|
为了便于讨论,这里只处理32bit的ARGB颜色;
代码使用C++;涉及到汇编优化的时候假定为x86平台;使用的编译器为vc6;
为了代码的可读性,没有加入异常处理代码;
测试使用的CPU为赛扬2G;
(一些基础代码和插值原理的详细说明参见作者的《图形图像处理-之-高质量的快速的图像缩放》系列文章)
速度测试说明:
只测试内存数据到内存数据的缩放
测试图片都是800*600旋转到1004*1004; fps表示每秒钟的帧数,值越大表示函数越快
A:旋转原理和旋转公式:
推导旋转公式:

旋转示意图
有: tg(b)=y/x ——(1)
tg(a+b)=y'/x' ——(2)
x*x + y*y = x'*x' + y'*y' ——(3)
有公式:tg(a+b) = ( tg(a)+tg(b) ) / ( 1-tg(a)*tg(b) ) ——(4)
把(1)代入(4)从而消除参数b;
tg(a)+y/x = y'/x'*( 1-tg(a)*y/x ) ——(5)
由(5)可以得x'=y'*(x-y*tg(a))/( x*tg(a)+y ) ——(6)
把(6)代入(3)从而消除参数x',化简后求得:
y'=x*sin(a)+y*cos(a); ——(7)
把(7)代入(6),有:
x'=x*cos(a)-y*sin(a); ——(8)
OK,旋转公式有了,那么来看看在图片旋转中的应用;
[1] [2] [3] [4] [5] [6] [7] 下一页
|