Gdiplus :: Bitmap :: Lock / UnlockBits总是复制数据吗?

时间:2014-05-28 18:28:07

标签: c++ windows gdi+

Gdiplus :: Bitmap :: Lock / UnlockBits是否总是复制数据?或者是否有可以将相关页面映射到我的进程的地址空间,给我一个零拷贝直接访问的情况?

如果是,对参数的已知限制是什么(例如特定格式,可能仅在请求整个图像时等等)?

如果不是,为什么不呢?界面看起来像是为了在可能的情况下提供直接访问。这只是微软的懒惰,还是存在一些技术障碍?

1 个答案:

答案 0 :(得分:2)

最好的我可以告诉它,它只会在您指定与Bitmap格式不同的格式时进行复制,或者您使用ImageLockModeUserInputBuf标记。

您可以通过创建一个带位指针的位图来测试这一点,例如http://msdn.microsoft.com/en-us/library/ms536315(v=vs.85).aspx。这些位永远不会复制到Bitmap对象中。因此,当且仅当您获得指向构造函数的指针时才会复制这些位。

您可以执行的另一项测试是锁定只读访问并尝试写入位。只有直接访问时,才会更改位图的内容。

我们对Wine中的LockBits进行了很多测试,因为它与(ab)使用此函数的Windows程序的兼容性很重要:http://source.winehq.org/ident?i=GdipBitmapLockBits