是否有更快的方法将大位图旋转90或270度而不是简单地使用倒置坐标进行嵌套循环?
位图是8bpp,通常是2048*2400*8bpp
目前我只是简单地使用参数反转进行复制(伪代码:
for x = 0 to 2048-1
for y = 0 to 2048-1
dest[x][y]=src[y][x];
Run Code Online (Sandbox Code Playgroud)
(实际上我是用指针做的,速度要快一点,但大小差不多)
对于大图像,GDI非常慢,纹理(GF7卡)的GPU加载/存储时间与当前CPU时间的大小相同.
任何提示,指针?就地算法甚至会更好,但速度比就地更重要.
Target是Delphi,但它更像是一个算法问题.SSE(2)矢量化没问题,对我来说,在汇编程序中编码它是一个很大的问题
跟进尼尔斯的回答
旧例程的时间:32ms(步骤1)
步长8:12ms的时间
步长16:10ms的时间
步长32+:9ms的时间
与此同时,我还在Athlon 64 X2(5200+ iirc)上进行了测试,其速度略高于四倍(80到19毫秒).
加速非常值得,谢谢.也许在夏季我会用SSE(2)版本折磨自己.但是我已经考虑过如何解决这个问题了,我想我会用完SSE2寄存器来实现直接实现:
for n:=0 to 7 do
begin
load r0, <source+n*rowsize>
shift byte from r0 into r1
shift byte from r0 into r2
..
shift byte from r0 into r8
end;
store r1, <target>
store r2, <target+1*<rowsize> …Run Code Online (Sandbox Code Playgroud)