ホームページ >バックエンド開発 >C++ >SetPixel と GetPixel を超えて C# Windows フォーム アプリのビットマップ操作パフォーマンスを向上するにはどうすればよいですか?

SetPixel と GetPixel を超えて C# Windows フォーム アプリのビットマップ操作パフォーマンスを向上するにはどうすればよいですか?

Barbara Streisand
Barbara Streisandオリジナル
2025-01-19 02:36:08922ブラウズ

How Can I Improve Bitmap Manipulation Performance in C# Windows Forms Apps Beyond SetPixel and GetPixel?

C# Windows フォームでのビットマップ操作速度の向上: SetPixel および GetPixel の代替手段

SetPixelGetPixel は、C# Windows Forms アプリケーションでのビットマップ操作が遅いことで有名です。 この記事では、高性能の代替手段について説明します。

DirectBitmap クラス: 優れたアプローチ

DirectBitmap クラスは、LockBitsSetPixel のパフォーマンス オーバーヘッドをバイパスして、ビットマップ データへの直接アクセスを提供します。

<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>

この直接メモリ操作によりメモリ割り当てが大幅に削減され、処理の高速化につながります。

バイトを含む生のピクセル データ: さらに高速

究極の速度を実現するには、整数の代わりにバイトを使用してピクセル データを表します。

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

各ピクセルは 4 バイト (ARGB) を使用するようになりました。 SetPixelGetPixel を適宜調整してください。

DirectBitmap の利点:

  • 優れたパフォーマンスを実現するダイレクト メモリ アクセス。
  • Dispose() による効率的なメモリ管理。
  • 安全でないコードブロックは必要ありません。

注意事項:

  • 固定メモリはガベージ コレクションに影響を与える可能性があります。重要なパフォーマンス シナリオでは慎重に使用してください。
  • ビットマップ データへの直接アクセスにより、Graphics オブジェクトとのシームレスな統合が可能になります。

パフォーマンス ベンチマーク:

パフォーマンス テストでは、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

これらの最適化された手法を実装することで、C# 開発者は Windows フォーム アプリケーション内でのビットマップ操作の効率を大幅に向上させることができます。

以上がSetPixel と GetPixel を超えて C# Windows フォーム アプリのビットマップ操作パフォーマンスを向上するにはどうすればよいですか?の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。

声明:
この記事の内容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰属します。このサイトは、それに相当する法的責任を負いません。盗作または侵害の疑いのあるコンテンツを見つけた場合は、admin@php.cn までご連絡ください。