Photoshop(或绘图程序)如何搞定?

时间:2010-05-20 01:26:21

标签: c++ c algorithm graphics photoshop

我正准备在Windows中制作绘图应用程序。我只是想知道,绘图程序有一个他们锁定的内存位图,然后设置每个像素,然后blit?

我不明白Photoshop如何在不使用硬件加速的情况下移动整个图层而不会出现滞后或闪烁。同样在像Expression Design这样的程序中,我可以拥有200个形状并一次性移动它们,没有任何延迟。我真的很想知道如果没有GPU帮助可以做到这一点。

另外,我认为超高效算法不能证明这一点吗?

3 个答案:

答案 0 :(得分:1)

当然可以使用现代Photoshop uses GPU acceleration。另一个可能的工具是DMA。您可能还会发现阅读现有程序的源代码很有帮助,例如GIMP

答案 1 :(得分:1)

看看这个问题:

Reduce flicker with GDI+ and C++

关于没有GPU的DC绘图所能做的就是减少闪烁。其他任何东西取决于填充内存位图的速度。在这里,您可以使用高效的算法,多线程以及您需要的任何内容。

答案 2 :(得分:1)

双重(或更多)缓冲是在游戏中完成的方式,我们在显示“前”缓冲区时将大量垃圾吸引到“后”缓冲区。然后当绘制完成时,缓冲区被交换(指针交换,而不是副本!)并且该过程在新的前后缓冲区中继续。

三重缓冲提供了另一个好处,因为你可以在完成下一帧时从现在开始绘制两帧,但不会在屏幕刷新过程中强制进行缓冲交换。许多游戏在刷新过程中进行缓冲交换,但有时您可能会将其视为屏幕上的可见伪像(撕裂)。

无论如何 - 对于应用程序将位图绘制到窗口中,如果您有一些“慢”操作,则在将显示的版本呈现给渲染API时,将其放入未显示的缓冲区中,例如, GDI。让系统软件处理所有花哨的更新。