相关疑难解决方法(0)

旋转位图.在代码中

是否有更快的方法将位图旋转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)矢量化没问题,对我来说,在汇编程序中编码它是一个很大的问题


跟进尼尔斯的回答

  • 图2048x2700 - > 2700x2048
  • 编译器Turbo Explorer 2006优化.
  • Windows:电源方案设置为"始终开启".(重要!!!!)
  • 机器:Core2 6600(2.4 GHz)

旧例程的时间: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)

delphi image-manipulation image-processing rotation

18
推荐指数
1
解决办法
1万
查看次数

扑克牌翻转动画

您知道任何可以实现3D翻转效果的免费组件/库吗?

在这里演示:snorkl.tv

delphi animation image flip

5
推荐指数
2
解决办法
3092
查看次数