> 백엔드 개발 > C++ > C#에서 `SetPixel` 및 `GetPixel` 이외의 비트맵 조작 속도를 어떻게 높일 수 있습니까?

C#에서 `SetPixel` 및 `GetPixel` 이외의 비트맵 조작 속도를 어떻게 높일 수 있습니까?

DDD
풀어 주다: 2025-01-19 02:27:08
원래의
548명이 탐색했습니다.

How Can I Speed Up Bitmap Manipulation in C# Beyond `SetPixel` and `GetPixel`?

C# 비트맵 조작 최적화: 느린 SetPixelGetPixel

에 대한 대안

소개

비트맵 조작을 위해 C#에 내장된 GetPixelSetPixel 메서드는 특히 큰 이미지를 처리할 때 속도가 매우 느립니다. 이 문서에서는 성능을 대폭 향상하기 위한 탁월한 대안을 제시합니다.

고성능 대안

세 가지 주요 방법은 표준 기능에 비해 상당한 속도 향상을 제공합니다.

  1. DirectBitmap 클래스: 이 사용자 정의 클래스는 비트맵 데이터에 대한 직접적이고 관리되지 않는 액세스를 제공하여 잠금 및 복사에 따른 오버헤드를 제거합니다. 직관적인 픽셀 조작을 위한 GetPixelSetPixel 방법을 제공합니다.

  2. LockBits 메서드: 이 기본 제공 메서드는 원시 데이터에 직접 액세스할 수 있도록 메모리의 비트맵 섹션을 잠급니다. SetPixel/GetPixel보다 빠르지만 명시적인 잠금 및 잠금 해제가 필요하므로 약간의 성능 비용이 발생합니다.

  3. 안전하지 않은 코드 블록: 이 접근 방식은 직접적인 메모리 조작을 위해 안전하지 않은 포인터를 활용합니다. 잠재적으로 가장 빠르지만 메모리 손상을 방지하려면 신중한 처리가 필요합니다. 이 방법은 숙련된 개발자에게 가장 적합합니다.

성능 벤치마크

성능은 이미지 크기와 특정 작업에 따라 다릅니다. 일반적으로 DirectBitmapLockBits을 능가하며 더 큰 비트맵의 경우 SetPixel/GetPixel보다 성능이 훨씬 뛰어납니다. 다음 표에서는 성능 차이를 보여줍니다.

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

코드 샘플: DirectBitmap

DirectBitmap 클래스는 픽셀 액세스를 단순화합니다.

<code class="language-csharp">public void SetPixel(int x, int y, Color colour)
public Color GetPixel(int x, int y)</code>
로그인 후 복사

사용 예:

<code class="language-csharp">var dbm = new DirectBitmap(width, height);
dbm.SetPixel(x, y, Color.Red);
Color c = dbm.GetPixel(x, y);</code>
로그인 후 복사

결론

대형 비트맵에 대한 최적의 성능을 위해 DirectBitmap 클래스는 기존 방법에 비해 상당한 속도 향상을 제공하는 강력한 솔루션을 제공합니다. LockBits 속도와 사용 편의성 사이에서 균형 잡힌 절충안을 제시하는 반면 안전하지 않은 코드는 잠재적으로 가장 빠르기는 하지만 신중한 구현이 필요합니다.

위 내용은 C#에서 `SetPixel` 및 `GetPixel` 이외의 비트맵 조작 속도를 어떻게 높일 수 있습니까?의 상세 내용입니다. 자세한 내용은 PHP 중국어 웹사이트의 기타 관련 기사를 참조하세요!

원천:php.cn
본 웹사이트의 성명
본 글의 내용은 네티즌들의 자발적인 기여로 작성되었으며, 저작권은 원저작자에게 있습니다. 본 사이트는 이에 상응하는 법적 책임을 지지 않습니다. 표절이나 침해가 의심되는 콘텐츠를 발견한 경우 admin@php.cn으로 문의하세요.
인기 튜토리얼
더>
최신 다운로드
더>
웹 효과
웹사이트 소스 코드
웹사이트 자료
프론트엔드 템플릿