2009-08-24 5 views
2

두 개의 진동하는 색상이 세 번째 색상이되는 방법을 보여줄 수있는 응용 프로그램 (winforms)을 작성하려고합니다. 이를 위해 두 가지 색상을 매우 빠르게 전환 할 수 있어야합니다 (50fps 이상). 관리 코드에서이 작업을 수행하기를 정말로 바라고 있습니다.고속 애니메이션을 구현하는 방법은 무엇입니까?

지금 저는 단색의 두 개의 작은 직사각형 비트 맵을 서로 위에 그립니다. 이중 버퍼링 사용 컨트롤에서 두 개의 메모리 내 비트 맵이있는 GDI + DrawImage를 사용하면 잘라내 지 않으며 고속으로 깜박임/끊어짐이 발생합니다. 슬라이더에 연결된 타이머가 스위칭을 트리거합니다.

  1. 이것은 현명한 접근입니까?
  2. GDI와 BitBLT가 더 좋을까요?
  3. WPF의 성능이 더 좋습니까?
  4. DirectX 또는 기타 기술은 어떻게됩니까?

나는 TIA의 의견을 정말로 기뻐합니다!

답변

2

GDI와 함께 고속 그래픽을 사용 해본 적이 없어서 DirectX를 사용했지만 MS는 Managed DirectX에 대한 지원을 중단했기 때문에 관리되지 않는 C++에서이 작업을 수행해야 할 수도 있습니다.

컨트롤러를 C#으로 작성한 다음 DirectX가 지원되는 관리되지 않는 C++ DLL 만 호출하는 관리되는 C++의 매우 얇은 레이어를 작성하십시오.

다른 응용 프로그램이 실제로 CPU를 사용할 수 없도록 컴퓨터를 독점적으로 제어해야합니다. 그렇지 않으면 프레임 속도를 떨어 뜨릴 수 있고 적어도 일관성이 없어 질 수 있습니다.

DirectX 9.0c와 같은 이전 버전의 .NET을 지원할 수있는 이전 버전을 사용하는 경우 약 70 프레임/초의 음악 프로그램에 대한 프레임 속도를 얻는 데이 프레임을 사용했습니다.

+0

내가 (실제로 대학부터) 년에 C++를 작성하지 않은,하지만 난 멀리 C++ 코드의 최소 얻을 수 있다면, 그것은 좋은 것입니다. – chriscena

+0

불행히도 최신 버전의 DirectX를 사용하면 훨씬 많은 C++을 수행 할 수 있으므로 앞서 언급 한 버전을 찾으십시오. –

+0

늦게 발생했지만 의견이 남았습니다. 솔루션으로 끝났습니다. 일부 찢어지는 문제로 인해 SDL에 대한 빠른 해결책을 찾지 못했습니다. DirectX 9.0c 버전을 발견하여 그래픽 매직을 수행하는 winform 컨트롤을 만들었습니다.추가 DirectX 설치를 피하기 위해 필자는 응용 프로그램 솔루션에 필요한 MDX DLL을 번들로 제공했습니다. 감사. – chriscena

1

깜박임은 더블 버퍼링 방식으로 피할 수 있어야합니다.이 경우 은 렌더링 컨트롤의 DoubleBuffered 속성을 True로 설정하는 것입니다. - 역설적으로 이것은 깜박임에 영향을주지 않습니다.

찢어짐은 DirectX를 통해 처리 할 수 ​​있지만 프레임 속도를 모니터의 재생 빈도와 동기화하는 경우에만 가능합니다. 이는 특히 프레임 속도를 달성해야하는 경우 (그리고 모니터의 재생 빈도가 아닌 경우) 특히 가능하지 않을 수 있습니다.

WPF가 근본적인 문제가 발생하지 않는다고 생각합니다.하지만 잘못된 것일 수 있습니다.

+0

의견에 감사드립니다. – chriscena

1

이것은 GDI와 작동하지만 깜박임을 제어 할 수 없으므로 문제가되지 않습니다. Direct X는 깜박 거리지 않는 두 개의 이미지를 보여주기 위해 많은 보풀이있을 수 있습니다. 아마도 SDL이 충분히 잘 작동 할 것입니까? 크로스 플랫폼이기 때문에 문자 그대로 30 줄 미만의 코드에서이 효과를 코딩 할 수 있습니다.

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

+0

SDL에 대해 잊어 버렸습니다. .NET 라이브러리를 사용할 수 있으므로 확실히 테스트 할 것입니다. 이것은 단지 해결책 일 수 있습니다. – chriscena

관련 문제