Meningkatkan Kelajuan Manipulasi Peta Bit dalam Borang Windows C#: Alternatif kepada SetPixel dan GetPixel
SetPixel
dan GetPixel
terkenal lambat untuk manipulasi bitmap dalam aplikasi C# Windows Forms. Artikel ini meneroka alternatif berprestasi tinggi.
Kelas DirectBitmap: Pendekatan Unggul
Kelas DirectBitmap
menyediakan akses terus kepada data bitmap, memintas overhed prestasi LockBits
dan 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>
Manipulasi ingatan langsung ini mengurangkan peruntukan memori dengan ketara, yang membawa kepada pemprosesan yang lebih pantas.
Data Piksel Mentah dengan Bait: Lebih Pantas
Untuk kelajuan muktamad, nyatakan data piksel menggunakan bait dan bukannya integer:
<code class="language-csharp">Bits = new byte[width * height * 4];</code>
Setiap piksel kini menggunakan 4 bait (ARGB). Ingat untuk melaraskan SetPixel
dan GetPixel
dengan sewajarnya.
Kelebihan DirectBitmap:
Dispose()
.Perhatian:
Graphics
.Tanda Aras Prestasi:
Ujian prestasi menunjukkan kelebihan jelas 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 |
Dengan melaksanakan teknik yang dioptimumkan ini, pembangun C# boleh meningkatkan kecekapan manipulasi bitmap secara mendadak dalam aplikasi Borang Windows mereka.
Atas ialah kandungan terperinci Bagaimanakah Saya Boleh Meningkatkan Prestasi Manipulasi Peta Bit dalam Apl Borang C# Windows Melebihi SetPixel dan GetPixel?. Untuk maklumat lanjut, sila ikut artikel berkaitan lain di laman web China PHP!