Do Gdiplus::Bitmap::Lock/UnlockBits总是复制数据
Do Gdiplus::Bitmap::Lock/UnlockBits always copy data?
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
相关文章:
- C++17复制构造函数,在std::unordereded_map上进行深度复制
- 在C++程序中输入的文本文件将不起作用,除非文本被复制和粘贴
- 使用strcpy将char数组的元素复制到另一个数组
- 是否可以初始化不可复制类型的成员变量(或基类)
- 为什么在C++中使用私有复制构造函数与删除复制构造函数
- C++ Windows 驱动程序MSB3030无法复制该文件,因为它找不到
- 复制列表初始化的隐式转换的等级是多少
- 当从函数参数中的临时值调用复制构造函数时
- 有可能在Armadillo中复制MATLAB circshift方法吗
- 复制几乎为空的数组的最快方法
- 以下示例中如何避免代码复制?C++/库达
- 如果有一个模板构造函数只有一个泛型参数,为什么我必须有一个复制构造函数
- 为什么需要复制构造函数,在哪些情况下它们非常有用
- 不能将复制初始化与隐式转换的多个步骤一起使用
- 当有分配器意识的容器被复制/移动时,反弹分配器是否被复制/移走
- 为什么复制而不是移动数据元素?
- 文件系统:复制功能的速度秘诀是什么
- 使用仅使用一次的变量调用的复制构造函数.这可能是通过调用move构造函数进行编译器优化的情况吗
- 为什么类中的ostringstream类型的成员会导致";调用隐含删除复制构造函数";错误
- Do Gdiplus::Bitmap::Lock/UnlockBits总是复制数据