Rumah >pembangunan bahagian belakang >C++ >Bagaimanakah Saya Boleh Mempercepatkan Manipulasi Bitmap dalam C# Beyond SetPixel dan GetPixel?

Bagaimanakah Saya Boleh Mempercepatkan Manipulasi Bitmap dalam C# Beyond SetPixel dan GetPixel?

Mary-Kate Olsen
Mary-Kate Olsenasal
2025-01-19 02:46:11610semak imbas

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

Mengoptimumkan Manipulasi Peta Bit dalam C#: Alternatif Unggul kepada SetPixel dan GetPixel

Kaedah

C# SetPixel dan GetPixel terkenal lambat untuk manipulasi bitmap. Artikel ini membentangkan alternatif yang lebih pantas dan lebih cekap.

Ketidakcekapan SetPixel/GetPixel

Kod berikut menunjukkan penggunaan tradisional dan tidak cekap SetPixel dan GetPixel:

<code class="language-csharp">// Inefficient code using SetPixel and GetPixel</code>

Pendekatan ini mengalami overhed yang ketara disebabkan oleh banyak panggilan ke GetPixel dan SetPixel.

Kelas DirectBitmap: Penyelesaian Berprestasi Tinggi

Alternatif yang sangat berkesan ialah kelas DirectBitmap, menyediakan akses terus kepada data mentah bitmap. Ini memintas keperluan untuk GetPixel dan SetPixel, yang membawa kepada peningkatan prestasi yang ketara. Contoh menggunakan DirectBitmap untuk melukis segi empat tepat:

<code class="language-csharp">using (var g = Graphics.FromImage(dbm.Bitmap))
{
    g.DrawRectangle(Pens.Black, new Rectangle(50, 50, 100, 100));
}</code>

Pengoptimuman Memori dengan Tatasusunan Byte

Untuk aplikasi yang menggunakan memori adalah yang paling utama, kelas DirectBitmap boleh disesuaikan untuk menggunakan tatasusunan bait dan bukannya tatasusunan integer:

<code class="language-csharp">Bits = new byte[width * height * 4];</code>

Kelebihan Kelas DirectBitmap:

  • Menghilangkan keperluan untuk LockBits dan mengurangkan overhed kutipan sampah.
  • Membolehkan akses terus kepada data bitmap mentah.
  • Mengekalkan ciri Bitmap standard.

Pertimbangan Penting:

  • Memori yang disematkan kekal tidak bergerak, berpotensi menjejaskan kecekapan pemungut sampah.
  • Sentiasa buang DirectBitmap kejadian untuk melepaskan memori yang disematkan.

Perbandingan Penanda Aras Prestasi

Ujian penanda aras jelas menunjukkan prestasi unggul DirectBitmap berbanding kaedah SetPixel/GetPixel dan LockBits tradisional:

<code>| Method       | 4x4     | 16x16    | 64x64    | 256x256   | 1024x1024  | 4096x4096  |
|--------------|---------|----------|----------|-----------|------------|------------|
| DirectBitmap  |          |          |          |           |            |            |</code>

Kesimpulan

Kelas DirectBitmap menawarkan peningkatan prestasi yang ketara berbanding kaedah manipulasi peta bit tradisional dalam C#. Akses langsungnya kepada data mentah dan mengelakkan panggilan GetPixel/SetPixel menjadikannya pilihan ideal untuk aplikasi sensitif prestasi.

Atas ialah kandungan terperinci Bagaimanakah Saya Boleh Mempercepatkan Manipulasi Bitmap dalam C# Beyond SetPixel dan GetPixel?. Untuk maklumat lanjut, sila ikut artikel berkaitan lain di laman web China PHP!

Kenyataan:
Kandungan artikel ini disumbangkan secara sukarela oleh netizen, dan hak cipta adalah milik pengarang asal. Laman web ini tidak memikul tanggungjawab undang-undang yang sepadan. Jika anda menemui sebarang kandungan yang disyaki plagiarisme atau pelanggaran, sila hubungi admin@php.cn