SetPixel
및 GetPixel
은 Windows Forms에서 픽셀 수준 비트맵 조작에 자주 사용되지만 특히 큰 이미지나 빈번한 작업의 경우 성능이 매우 낮습니다. 이 기사에서는 더 빠른 대안을 살펴봅니다.
DirectBitmap 클래스
매우 효율적인 솔루션은 DirectBitmap
클래스입니다. 이 클래스는 고정된 메모리를 활용하여 LockBits
또는 SetPixel
없이도 비트맵 데이터에 직접 액세스할 수 있습니다. 원시 비트맵 데이터에 직접 액세스하면 성능이 크게 향상됩니다.
바이트 기반 원시 픽셀 데이터
원시 픽셀 데이터를 정수 대신 바이트로 표현하면 더욱 최적화할 수 있습니다. 이렇게 하면 데이터 형식이 ARGB(알파/빨간색/녹색/파란색)로 전환되며 각 픽셀은 4바이트를 소비합니다. 이를 위해서는 GetPixel
및 SetPixel
기능을 적절하게 조정해야 합니다.
DirectBitmap
클래스를 사용하면 다음과 같은 주요 이점이 있습니다.
IDisposable
과 유사한 Bitmap
을 구현하여 객체 관리 오버헤드를 최소화합니다.unsafe
코드 블록이 필요하지 않습니다.DirectBitmap
에서 사용하는 고정된 메모리에는 이동이 불가능하다는 제한이 있습니다. 고정된 메모리 액세스의 이러한 고유한 특성은 가비지 수집 효율성에 영향을 미칠 수 있습니다. 따라서 성능이 중요한 경우에만 이 기술을 신중하게 사용하고 메모리 고정을 해제하기 위해 항상 적절한 폐기를 보장하세요.
DirectBitmap
에서 제공하는 직접 액세스에도 불구하고 Graphics
개체는 여전히 비트맵 조작을 위한 실행 가능한 도구입니다.
DirectBitmap
, LockBits
및 SetPixel
을 비교하면 특히 큰 이미지의 경우 상당한 성능 차이가 나타납니다.
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
클래스는 특히 더 큰 이미지를 처리할 때 LockBits
및 SetPixel
보다 확실히 성능이 뛰어납니다.
위 내용은 Windows Forms 응용 프로그램에서 픽셀 조작 속도를 어떻게 높일 수 있습니까?의 상세 내용입니다. 자세한 내용은 PHP 중국어 웹사이트의 기타 관련 기사를 참조하세요!