Windows 有一种RTL_BITMAP可以与其 API 一起使用的数据结构。
但我前段时间需要这个代码,所以我在这里写了它(警告,它有点难看): https:
//gist.github.com/3206128
我只对其进行了部分测试,因此它可能仍然存在错误(尤其是在reverse)。但最近的版本(与这个版本仅略有不同)似乎对我有用,因此值得一试。
整个事情的基本操作是能够快速找到一系列位的长度:
long long GetRunLength(
const void *const pBitmap, unsigned long long nBitmapBits,
long long startInclusive, long long endExclusive,
const bool reverse, /*out*/ bool *pBit);
Run Code Online (Sandbox Code Playgroud)
鉴于其多功能性,其他一切都应该很容易在此基础上构建。
我尝试包含一些 SSE 代码,但它并没有明显提高性能。然而,总的来说,代码比逐位分析快很多倍,所以我认为它可能有用。
测试您是否可以以某种方式获取vector<bool>'s 缓冲区应该很容易 - 如果您使用的是 Visual C++,那么我包含的一个函数可以为您完成此操作。如果您发现错误,请随时告诉我。
| 归档时间: |
|
| 查看次数: |
1171 次 |
| 最近记录: |