2009-08-24 25 views
2

我想寫一個應用程序(winforms),可以演示如何兩個振盪的顏色將導致第三種顏色。爲此,我需要能夠非常快速地在兩種顏色之間切換(以> 50 fps)。我真的希望在託管代碼中這樣做。如何實現高速動畫?

現在我正在繪製兩個純色的小矩形位圖。使用GDI + DrawImage和雙緩存啓用控件中的兩個內存位圖不會將其剪切並導致高速閃爍/撕裂。連接到滑塊的計時器觸發切換。

  1. 這是一個明智的做法?
  2. GDI和BitBLT會更好嗎?
  3. WPF表現更好嗎?
  4. 那麼DirectX或其他 技術呢?

我會很感激的反饋,TIA!

回答

2

我從未有過GDI好運做高速顯卡,所以我使用的DirectX,但MS已降至支持託管DirectX,所以你可能需要做這在非託管C++。

只寫你在C#中的控制器,然後有一個非常薄的託管C++只是調用到具有支持DirectX非託管C++ DLL的層。

您將需要獲得計算機的唯一控制權,所以沒有其他應用程序可以真正使用CPU,否則你會發現你的幀率可以下降,或至少沒有非常一致。

如果您使用的是舊版本的DirectX,例如DirectX 9.0c,它可能仍然支持.NET,並且我使用它來獲得約70幀/秒的音樂節目的幀速率。

+0

我已經很多年沒有寫C++(因爲大學實際上),但如果我可以逃脫最小的C++代碼,這將是巨大的。 – chriscena 2009-08-26 16:30:49

+0

不幸的是,如果您使用的是更新版本的DirectX,那麼您將會使用更多的C++,因此只需查找我提到的版本即可。 – 2009-08-27 01:24:04

+0

反饋過晚,但無論如何:這最終成爲解決方案,由於我無法找到SDL的快速解決方案,因此出現了一些撕裂問題。發現了DirectX 9.0c版本,創建了一個圖形魔術的WinForm控件。爲了避免額外的DirectX安裝,我只捆綁了應用程序解決方案中所需的MDX DLL。謝謝。 – chriscena 2009-10-25 16:25:04

1

閃爍應避免使用雙緩衝方法(和本我意味着只需設置,繪製控制的DoubleBuffered屬性設爲True - 諷刺的是,這會對閃爍無影響)。

撕裂可以處理通過DirectX的,但只有當你同步你的顯示器的刷新率的幀速率。這可能是不可能的,特別是如果你需要達到一個特定的幀率(並且它不會是你的顯示器的刷新率)。

我不認爲WPF解決了基本撕裂問題(但我可能是錯的)。

+0

感謝您的反饋。 – chriscena 2009-08-26 16:29:24

1

這將與GDI一起工作,但是你將無法控制閃爍,所以這是不可能的。爲了顯示兩張非閃爍圖像,Direct X可能會有很多額外的絨毛。也許SDL將工作得很好?它是跨平臺的,你可以從字面上用少於30行的代碼編碼這個效果。

http://cs-sdl.sourceforge.net/index.php/SimpleExample

+0

我忘記了SDL。絕對要測試這個,因爲有一個.NET庫可用。這可能只是解決方案。 – chriscena 2009-08-26 16:28:47