如果我使用CreateDIBSection()创建DIB,我可以通过将BITMAPINFOHEADER结构的biHeight字段设置为负值或正值来指定它应该是自上而下还是自下而上。但是,如果我在这样的位图上调用GetObject()来填充DIBSECTION结构,那么dsBm.bmHeight和dsBmih.biHeight似乎都是正数。
当我只有HBITMAP时,有没有办法找出DIB是自上而下还是自下而上
发布于 2009-03-20 01:44:30
我认为你能从HBITMAP中得到的最好的结果就是GetDIBits。然而,GetDIBits的问题在于,它还需要一个HDC,并且HBITMAP必须是一个分布式数据库。
请参阅:
我不是很确定,但在转换过程中你可能会失去任何自上而下的感觉。
发布于 2009-03-19 17:46:23
不需要;您需要使用BITMAPINFOHEADER,并且它不能从HBITMAP中恢复。
发布于 2009-05-21 14:30:37
没有办法从GDI中检索这些信息。正如您已经发现的,通过GetObject检索的位图和BITMAPINFOHEADER bmHeight字段始终是正的。同样,bmWidthBytes字段也是正的。如果您使用GDI句柄在DIBSection上绘制(或从中绘制),GDI将以正确的方式向上绘制DIBSection。使用提取的BITMAPINFOHEADER将会得到错误的自上而下的位图。
从用户模式判断的唯一方法似乎是使用GDI测试- SetPixel位图的左上角和左下角像素为两个不同的值,然后读取缓冲区,看看哪一个写到了第一个内存位置。
实际上最好的选择是内置到你的应用编程接口中--无论你将DIBSection作为HBITMAP传递,都要确保至少有一个布尔API被传递或存储。
https://stackoverflow.com/questions/662853
复制相似问题