System.Drawing.Bitmap 的步幅参数:深入探究
stride
构造函数中的System.Drawing.Bitmap
参数经常会引起混乱。 本文解释了为什么它必须是 4 的倍数。
此要求源于较旧的 CPU 架构。 为了获得最佳性能,这些 CPU 以 32 位块的形式处理位图数据。 每个扫描线的第一个字节与 32 位边界(4 的倍数)的对齐至关重要。 任何错位都需要额外的 CPU 周期来进行数据重组。
尽管现代 CPU 支持缓存行对齐,但为了向后兼容,仍保留 4 的倍数 stride
约束。
步幅计算
正确的stride
计算如下:
<code class="language-csharp">int bitsPerPixel = ((int)format & 0xff00) >> 8; int bytesPerPixel = (bitsPerPixel + 7) / 8; int stride = 4 * ((width * bytesPerPixel + 3) / 4);</code>
替换图像的 format
和 width
以获得适当的 stride
。
总结
了解 stride
限制的历史背景是有效使用 System.Drawing.Bitmap
构造函数的关键。 4 的倍数 stride
确保跨各种架构的兼容性和性能优化。
以上是为什么System.Drawing.Bitmap中的Stride参数必须是4的倍数?的详细内容。更多信息请关注PHP中文网其他相关文章!