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

Do Gdiplus::Bitmap::Lock/UnlockBits always copy data?

本文关键字:复制 UnlockBits 数据 Gdiplus Bitmap Lock Do      更新时间:2023-10-16

Gdiplus::Bitmap::Lock/UnlockBits总是复制数据吗?或者在某些情况下,它可以将相关页面映射到进程的地址空间,从而为我提供零复制直接访问?

如果是,对参数的已知限制是什么(比如特定的格式,可能只有当整个图像被请求时,等等…)?

如果没有,为什么没有?这个接口看起来是为了尽可能地提供直接访问。这只是微软的懒惰,还是有一些技术障碍?

我只能告诉,它只复制当你指定的格式不同于位图的格式,或者你使用ImageLockModeUserInputBuf标志。

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

您可以做的另一个测试是锁定只读访问并尝试写位。位图的内容只有在您直接访问时才会更改。

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