ホームページ > バックエンド開発 > C++ > SetPixel と GetPixel を超えて C# でのビットマップ操作を高速化するにはどうすればよいですか?

SetPixel と GetPixel を超えて C# でのビットマップ操作を高速化するにはどうすればよいですか?

Mary-Kate Olsen
リリース: 2025-01-19 02:46:11
オリジナル
652 人が閲覧しました

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

C# でのビットマップ操作の最適化: SetPixel および GetPixel の優れた代替手段

C# の SetPixel メソッドと GetPixel メソッドは、ビットマップ操作が遅いことで有名です。この記事では、より高速で効率的な代替手段を紹介します。

SetPixel/GetPixel の非効率性

次のコードは、SetPixelGetPixel の従来の非効率的な使用例を示しています。

<code class="language-csharp">// Inefficient code using SetPixel and GetPixel</code>
ログイン後にコピー

このアプローチでは、GetPixelSetPixel への多数の呼び出しにより、重大なオーバーヘッドが発生します。

DirectBitmap クラス: 高性能ソリューション

非常に効果的な代替手段は、ビットマップの生データへの直接アクセスを提供する DirectBitmap クラスです。これにより、GetPixelSetPixel の必要性が回避され、大幅なパフォーマンスの向上につながります。 DirectBitmap を使用して長方形を描画する例:

<code class="language-csharp">using (var g = Graphics.FromImage(dbm.Bitmap))
{
    g.DrawRectangle(Pens.Black, new Rectangle(50, 50, 100, 100));
}</code>
ログイン後にコピー

バイト配列によるメモリの最適化

メモリ使用量が最重要であるアプリケーションの場合、整数配列の代わりにバイト配列を利用するように DirectBitmap クラスを適応させることができます。

<code class="language-csharp">Bits = new byte[width * height * 4];</code>
ログイン後にコピー

DirectBitmap クラスの利点:

  • LockBits の必要性がなくなり、ガベージ コレクションのオーバーヘッドが削減されます。
  • 生のビットマップ データへの直接アクセスを可能にします。
  • 標準の Bitmap プロパティを保持します。

重要な考慮事項:

  • 固定されたメモリは移動不能なままとなり、ガベージ コレクターの効率に影響を与える可能性があります。
  • 固定されたメモリを解放するには、常に DirectBitmap インスタンスを破棄してください。

パフォーマンス ベンチマークの比較

ベンチマーク テストは、従来の DirectBitmap/SetPixel および GetPixel メソッドと比較して、LockBits の優れたパフォーマンスを明らかに示しています。

<code>| Method       | 4x4     | 16x16    | 64x64    | 256x256   | 1024x1024  | 4096x4096  |
|--------------|---------|----------|----------|-----------|------------|------------|
| DirectBitmap  |          |          |          |           |            |            |</code>
ログイン後にコピー

結論

DirectBitmap クラスは、C# の従来のビットマップ操作メソッドに比べてパフォーマンスが大幅に向上しています。 生データへの直接アクセスと GetPixel/SetPixel 呼び出しの回避により、パフォーマンス重視のアプリケーションにとって理想的な選択肢となります。

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

ソース:php.cn
このウェブサイトの声明
この記事の内容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰属します。このサイトは、それに相当する法的責任を負いません。盗作または侵害の疑いのあるコンテンツを見つけた場合は、admin@php.cn までご連絡ください。
著者別の最新記事
人気のチュートリアル
詳細>
最新のダウンロード
詳細>
ウェブエフェクト
公式サイト
サイト素材
フロントエンドテンプレート