2009-08-26 3 views
0

.NET GDI + 비트 맵 개체가 있거나 (문제가 WPF 비트 맵 개체를보다 쉽게 ​​만드는 경우) 원하는 항목은 dx, 전체 (전체 픽셀), .NET을 사용하는 것이 이상적이지만 API 호출은 괜찮습니다. 적당히 큰 비트 맵을 사용하면 10,000 번을 호출하는 것이 효율적이어야합니다.자동 스크롤 또는 .NET에서 비트 맵 이동

DrawImage를 사용하여 솔루션을 구현했지만 속도가 느리고 GC가 사용 된 임시 객체를 정리하는 동안 응용 프로그램을 몇 분 동안 중단합니다.

나는 또한 ScrollDC를 사용하여 버전 작업을 시작했으나 비트 맵의 ​​DC에서 작동하도록하는 데 운이 없었습니다. (비트 맵 핸들로 API 비트 맵을 만든 다음, 호환되는 DC asnd는 ScrollDC를 호출하지만 비트 맵 객체에 다시 넣어야합니다.

비트 맵을 이동하는 "적절한"방법이 있어야합니다. mikej

답변

0

Graphics.FromImage 방법을 찾았습니까? 그러면 비트 맵을 직접 조작 할 수 있습니다. DrawImage에서 무엇을 사용하고 있는지 잘 모르겠지만 Graphics.DrawImage를 사용하면 비트 맵 영역을 복사하여 프로세스에 적용 할 수 있습니다.

Graphics 객체를 사용하면 Graphics.GetHdc, ScrollDC 및 Graphics.ReleaseHdc를 사용할 수 있습니다.

0

전체 그래픽 만 이동 하시겠습니까? DrawImage에는 x, y 매개 변수가 있습니다. 나는 아마도 당신의 질문을 정확하게 해석하지 않을 것입니다.

GDI는 10,000 개의 이미지로 작업 할 때 효율적인 시간이되지 않습니다. 실시간 성능에 가까운 곳에서 알고리즘을 재 작업하거나 3D API (예 : DirectX 또는 OpenGL) 또는 둘 다를 조사해야합니다.

0

내 질문에 지나치게 명확하지 않은 경우 죄송합니다. 내가하려는 것은 비트 맵을 스크롤하여 즉 시프트 작업을 수행하는 것입니다. 예를 들어, Scroll (B, 1,0)과 같은 메서드는 전체 비트 맵 B를 오른쪽으로 한 픽셀 씩 이동합니다.

DrawImage와 ScrollWindowEx API 호출을 사용하는 합리적인 솔루션이 있는데, 이는 약 10 배 더 빠릅니다.

저는 WPF를 사용하여 더 빠르게 뭔가를 할 수있는 방법을 찾으려고합니다.

0

나는 Scrolling a bitmap에있는 문제에 대한 해결책을 썼습니다. 그러나 더 나은 방법이 없다고 확신하지 못하고 WPF에서 더 잘 할 수 있을지 모르겠습니다.