C#에서 비트맵 조작 최적화: SetPixel 및 GetPixel에 대한 우수한 대안
C#의 SetPixel
및 GetPixel
메서드는 비트맵 조작 속도가 매우 느립니다. 이 기사에서는 더 빠르고 효율적인 대안을 제시합니다.
SetPixel/GetPixel의 비효율성
다음 코드는 SetPixel
및 GetPixel
의 전통적이고 비효율적인 사용을 보여줍니다.
<code class="language-csharp">// Inefficient code using SetPixel and GetPixel</code>
이 접근 방식은 GetPixel
및 SetPixel
에 대한 수많은 호출로 인해 상당한 오버헤드가 발생합니다.
DirectBitmap 클래스: 고성능 솔루션
매우 효과적인 대안은 비트맵의 원시 데이터에 대한 직접 액세스를 제공하는 DirectBitmap
클래스입니다. 이는 GetPixel
및 SetPixel
의 필요성을 우회하여 상당한 성능 향상을 가져옵니다. DirectBitmap
을 사용하여 직사각형을 그리는 예:
<code class="language-csharp">using (var g = Graphics.FromImage(dbm.Bitmap)) { g.DrawRectangle(Pens.Black, new Rectangle(50, 50, 100, 100)); }</code>
바이트 배열을 통한 메모리 최적화
메모리 사용량이 가장 중요한 애플리케이션의 경우 DirectBitmap
클래스를 정수 배열 대신 바이트 배열을 활용하도록 조정할 수 있습니다.
<code class="language-csharp">Bits = new byte[width * height * 4];</code>
DirectBitmap 클래스의 장점:
LockBits
의 필요성을 없애고 가비지 수집 오버헤드를 줄입니다.Bitmap
속성을 유지합니다.중요 고려 사항:
DirectBitmap
인스턴스를 폐기하세요.성능 벤치마크 비교
벤치마크 테스트는 기존 DirectBitmap
/SetPixel
및 GetPixel
방법과 비교하여 LockBits
의 우수한 성능을 명확하게 보여줍니다.
<code>| Method | 4x4 | 16x16 | 64x64 | 256x256 | 1024x1024 | 4096x4096 | |--------------|---------|----------|----------|-----------|------------|------------| | DirectBitmap | | | | | | |</code>
결론
DirectBitmap
클래스는 C#의 기존 비트맵 조작 방법에 비해 성능이 크게 향상되었습니다. 원시 데이터에 직접 액세스하고 GetPixel
/SetPixel
호출을 방지하므로 성능에 민감한 애플리케이션에 이상적인 선택입니다.
위 내용은 SetPixel 및 GetPixel 이외의 C#에서 비트맵 조작 속도를 어떻게 높일 수 있습니까?의 상세 내용입니다. 자세한 내용은 PHP 중국어 웹사이트의 기타 관련 기사를 참조하세요!