C# アプリケーションでは、ビットマップの操作に一般的に GetPixel
メソッドと SetPixel
メソッドが使用されます。ただし、場合によっては、そのパフォーマンスがボトルネックになる可能性があります。この記事では、より高速な代替手段を検討し、潜在的なパフォーマンス向上を評価します。
カスタマイズされた DirectBitmap
クラスは、中間のロック操作やロック解除操作を行わずに、ビットマップ データへの直接アクセスを提供します。このアプローチにより、より高速なピクセル操作が可能になります:
<code class="language-csharp">public class DirectBitmap : IDisposable { public Int32[] Bits { get; private set; } public int Width { get; private set; } public int Height { get; private set; } public void SetPixel(int x, int y, Color color) { Bits[x + (y * Width)] = color.ToArgb(); } public Color GetPixel(int x, int y) { int index = x + (y * Width); int col = Bits[index]; return Color.FromArgb(col); } }</code>
DirectBitmap
クラスは、メモリ リソースの管理を容易にするために IDisposable
を実装します。 次の表は、ダイレクト ビットマップ メソッドのパフォーマンスを LockBits
および SetPixel
メソッドと比較しています。
方法 | 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
を大幅に上回っています。 SetPixel
クラスを使用すると、パフォーマンスが大幅に向上します。このアプローチにより、ロックおよびロック解除操作が不要になり、ビットマップ データへの直接アクセスが提供されるため、より高速な処理が可能になります。 DirectBitmap
以上がGetPixel と SetPixel を超えて C# でのビットマップ ピクセル操作を高速化するにはどうすればよいですか?の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。