C# Windows Forms에서 비트맵 조작 속도 향상: SetPixel 및 GetPixel의 대안
SetPixel
및 GetPixel
은 C# Windows Forms 애플리케이션의 비트맵 조작 속도가 매우 느린 것으로 악명이 높습니다. 이 기사에서는 고성능 대안을 살펴봅니다.
DirectBitmap 클래스: 탁월한 접근 방식
DirectBitmap
클래스는 LockBits
및 SetPixel
의 성능 오버헤드를 우회하여 비트맵 데이터에 대한 직접 액세스를 제공합니다.
<code class="language-csharp">public class DirectBitmap : IDisposable { // ... public void SetPixel(int x, int y, Color colour) { int index = x + (y * Width); int col = colour.ToArgb(); Bits[index] = col; } public Color GetPixel(int x, int y) { int index = x + (y * Width); int col = Bits[index]; Color result = Color.FromArgb(col); return result; } // ... }</code>
이러한 직접 메모리 조작은 메모리 할당을 크게 줄여 처리 속도를 향상시킵니다.
바이트가 포함된 원시 픽셀 데이터: 더욱 빨라짐
최고의 속도를 위해 정수 대신 바이트를 사용하여 픽셀 데이터를 표현하세요.
<code class="language-csharp">Bits = new byte[width * height * 4];</code>
이제 각 픽셀은 4바이트(ARGB)를 사용합니다. SetPixel
및 GetPixel
을 적절하게 조정하세요.
DirectBitmap의 장점:
Dispose()
으로 효율적인 메모리 관리.참고 사항:
Graphics
개체와 원활하게 통합됩니다.성능 벤치마크:
성능 테스트는 DirectBitmap
의 확실한 장점을 보여줍니다.
Method | 4x4 | 16x16 | 64x64 | 256x256 | 1024x1024 | 4096x4096 |
---|---|---|---|---|---|---|
DirectBitmap | 2 | 28 | 668 | 8219 | 178639 | |
LockBits | 2 | 3 | 33 | 670 | 9612 | 197115 |
SetPixel | 45 | 371 | 5920 | 97477 | 1563171 | 25811013 |
이러한 최적화된 기술을 구현함으로써 C# 개발자는 Windows Forms 애플리케이션 내에서 비트맵 조작의 효율성을 크게 향상시킬 수 있습니다.
위 내용은 SetPixel 및 GetPixel 이외의 C# Windows Forms 앱에서 비트맵 조작 성능을 어떻게 향상시킬 수 있습니까?의 상세 내용입니다. 자세한 내용은 PHP 중국어 웹사이트의 기타 관련 기사를 참조하세요!