ホームページ > バックエンド開発 > C++ > WPF でビットマップからビットマップソースへの変換を最適化し、高いフレーム レートを実現するにはどうすればよいですか?

WPF でビットマップからビットマップソースへの変換を最適化し、高いフレーム レートを実現するにはどうすればよいですか?

DDD
リリース: 2025-01-11 11:02:44
オリジナル
366 人が閲覧しました

How Can I Optimize Bitmap-to-BitmapSource Conversion in WPF for High Frame Rates?

スムーズな高フレームレート画像表示のための WPF ビットマップからビットマップソースへの変換の強化

高リフレッシュ レート (例: 30Hz) で WPF の Image コントロールで滑らかな画像表示を維持するには、System.Drawing.Bitmap から System.Windows.Media.Imaging.BitmapSource への効率的な変換が必要です。 一般的な CreateBitmapSourceFromHBitmap メソッドは計算コストが高くつくため、CPU 使用率が高くなり、パフォーマンスに影響を与える可能性があります。

パフォーマンスを向上させる変換の強化

優れたパフォーマンスを得るには、より直接的なアプローチをお勧めします。これには、ビットマップのビットをロックし、そのピクセル データに直接アクセスすることが含まれます。 変換中に PixelFormat を正確に指定すると、速度がさらに向上します。 次のコードは、この最適化されたメソッドを例にしています:

<code class="language-csharp">public static BitmapSource Convert(System.Drawing.Bitmap bitmap)
{
    var bitmapData = bitmap.LockBits(
        new System.Drawing.Rectangle(0, 0, bitmap.Width, bitmap.Height),
        System.Drawing.Imaging.ImageLockMode.ReadOnly, bitmap.PixelFormat);

    var bitmapSource = BitmapSource.Create(
        bitmapData.Width, bitmapData.Height,
        bitmap.HorizontalResolution, bitmap.VerticalResolution,
        PixelFormats.Bgr24, null,
        bitmapData.Scan0, bitmapData.Stride * bitmapData.Height, bitmapData.Stride);

    bitmap.UnlockBits(bitmapData);

    return bitmapSource;
}</code>
ログイン後にコピー

この最適化された変換は通常、CreateBitmapSourceFromHBitmap よりも少なくとも 4 倍の速度を実現します。

30Hz 以降の達成: 全体的な最適化

この変換の改善により CPU 負荷が大幅に軽減されますが、30 Hz (またはそれ以上) に達して維持するには、アプリケーション レベルのさらなる最適化が必要になる可能性があります。 画像のサイズ、処理段階、ハードウェアの制限がすべて影響します。 高フレームレートでパフォーマンスを最大化するには、ボトルネックを正確に特定するための徹底的なアプリケーションプロファイリングが重要です。

以上がWPF でビットマップからビットマップソースへの変換を最適化し、高いフレーム レートを実現するにはどうすればよいですか?の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。

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