【发布时间】:2021-04-03 15:44:57
【问题描述】:
我一直在查看作为 DirectX 工具包一部分的 WICTextureLoader.cpp 文件。我正在尝试理解这段代码:
https://github.com/microsoft/DirectXTK/blob/master/Src/WICTextureLoader.cpp#L530
// Allocate temporary memory for image
uint64_t rowBytes = (uint64_t(twidth) * uint64_t(bpp) + 7u) / 8u;
uint64_t numBytes = rowBytes * uint64_t(theight);
我知道您需要为单行纹理分配纹理宽度 * 每像素位数。但是我不明白每个像素加 7,然后整个东西除以 8。那是什么意思?
【问题讨论】:
-
它确保 rowBytes 可以被 8 整除,并且可以包含 twidth * bpp。
-
@SimonMourier 好的,谢谢。但是为什么在系统内存中为像素数据分配的空间是 8 的倍数很重要呢?
-
这在此处记录:docs.microsoft.com/en-us/windows/win32/api/wincodec/… 间距/步幅在某个边界(4、8 等)上对齐,这就是它存在的原因:docs.microsoft.com/en-us/windows/win32/medfound/image-stride
-
@SimonMourier 谢谢。我也猜想因为他们是按像素而不是字节做位,我想这也是必要的,因为你不能分配少于一个字节。