2009-09-29 16 views
4

현재 1000x1000 비트 맵을 만들고 있는데 Bitmap.SetPixel() 함수를 호출하는 데 약 0.3 초가 소요됩니다.Bitmap.SetPixel (x, y, Color) too slow

실제로 픽셀의 50 % 만 그리기 때문에 setpixel을 500,000 번 호출하는 것과 비슷합니다. OTOH 비디오 게임은 많은 호응을 얻는 것처럼 보입니다 만, OTOH 비디오 게임은 더 많은 일을하고 있으며 더 많은 픽셀을 처리합니다 (일부는 절차 적으로 생성되었습니다).

분명히 Bitmap.SetPixel은 속도에 최적화되어 있지 않지만, 괜찮은 애니메이션을 얻으려면 비트 맵을 20-30 번 업데이트해야하는 경우 속도가 느려지므로 내 옵션은 무엇입니까?

+0

내가 비트 맵에 자신의 버퍼 후 "블리트"가 사용할 수 있습니다. 죄송합니다, 실제로 코드 솔루션을 직접 알지는 못하지만 각 픽셀에 SetPixel을 사용하지 않고 자체 버퍼에 쓰거나 버퍼에 액세스 할 수 있습니다. –

답변

6

Bob Powell은 메모리에서 직접 픽셀 맵에 액세스하는 데 훌륭한 tutorial을 가지고 있습니다.

+0

감사합니다. –

+0

이것은 나를 도왔습니다. 열쇠는 Bitmap.LockBits, Bitmap.UnlockBits를 사용하고 있습니다. –

+0

해당 링크는 권장하지 않는 멀웨어 및 스팸 사이트입니다! – sergiol

1

현대 블록버스터 비디오 게임 하드웨어의 뒤에서 모든 픽셀 설정을 할; 하드웨어에 기하학 버퍼를 제공하고 고도로 병렬화 된 하드웨어는 모든 수학을 수행합니다. OpenGL과 DirectX는 하드웨어와 통신하기위한 API입니다.

일부 자습서의 경우 gamedev.net을 검색하십시오.

1

나는 FastBitmap을 추천 할 수 있습니다 :

FastBitmap fb = new FastBitmap(b); 
fb.LockImage(); 

... 

fb.SetPixel(x, y, Color.Red); 

... 

fb.UnlockImage();