System.Drawing.Bitmap のストライド要件を理解する
stride
コンストラクター内の System.Drawing.Bitmap
パラメーターは 4 の倍数である必要があります。この制約は、古い CPU のアーキテクチャ設計に由来しています。
初期の CPU アーキテクチャは、ピクセルを 32 ビットのチャンクで読み取ることでビットマップ処理を最適化し、各スキャンラインの先頭との位置合わせを保証しました。 この 4 バイトの倍数のアライメントは、パフォーマンスにとって非常に重要でした。 位置がずれていると、パフォーマンスに重大な影響が生じます。
最新の CPU はこの位置合わせの問題の影響を受けにくいですが、ストライドを 4 の倍数にする要件を維持することで下位互換性が確保されます。
正しい歩幅の計算
ストライドのサイズが間違っていることによる問題を防ぐには、画像の形式と幅に基づいて必要なストライドを動的に計算します。
<code class="language-csharp">int bitsPerPixel = ((int)format & 0xff00) >> 8; int bytesPerPixel = (bitsPerPixel + 7) / 8; int stride = 4 * ((width * bytesPerPixel + 3) / 4);</code>
この計算により、4 の倍数のストライドが保証され、さまざまな CPU アーキテクチャ間で最適な互換性とパフォーマンスが保証されます。
以上がSystem.Drawing.Bitmap のストライドが 4 の倍数でなければならないのはなぜですか?の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。