首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >理解GetDiBits。C++

理解GetDiBits。C++
EN

Stack Overflow用户
提问于 2018-04-11 20:41:09
回答 1查看 664关注 0票数 3

MSDN说,在调用此函数之前,不应该将GetDiBits中使用的位图选择到DC中。但是根据我的经验(使用BitBlt),我知道除非选择了位图,否则我无法绘制位图。

  1. GetDiBits是如何规避这一问题的?我可以使用一个未选定的,新创建的位图作为这个函数的参数吗?
  2. GetDiBits以及CreateDibSection也返回一个数组。但是MSDN提到了第一个函数: “指定兼容位图的位”

我认为DI代表DeviceIndependent。为什么会有矛盾呢?这意味着,根据MSDN,GetDiBits只能与CreateCompatibleBitmap (即DD)一起使用?那么我就不能把这个数组发送到另一台机器来显示它,对吗?

  1. 这两个函数都使用hDC。如果CreateDibSection是真正的DIndependent,为什么它需要一个hDC?所有需要的信息都是通过位图信息头提供的.
EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2018-04-11 21:07:55

  1. 除非选中位图,否则我无法绘制位图。GetDiBits是如何规避这一问题的?

GetDIBits不做任何绘图。它从位图中读取像素数据并将其转换为所需的颜色格式。SetDIBits也不会“绘制”,但是它会在位图中设置像素数据。

  1. 命名混乱。

GetDIBitmap中的DI是指像素数据以独立于设备的格式返回的事实(具体来说,就是您所要求的格式)。源位图可以是兼容位图,也可以是与设备无关的位图.

类似地,SetDIBitmap接收与设备无关的像素数据,并将其转换为目标位图的类型。

这些函数的命名令人费解。

  1. DC是干什么用的?

DC用于回答有关设备上像素格式的任何问题。例如,如果源格式是基于调色板的依赖于设备的位图,GetDIBits将假定在DC中选择的调色板是正确的。注意,调色板不在BITMAPINFOHEADER中。

CreateDIBSection创建了一个混合位图,该位图将数据存储在独立于设备的方法中,但也可能与设备相关的副本保持同步以提高性能。所以它需要知道目标设备的直流。

票数 5
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/49784146

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档