Python Win32API bitmap.GetBitmapBits()

Tre*_*vor 3 python winapi bitmap

只是一个我无法找到任何细节的快速问题:我正在使用python win32api捕获我的计算机的屏幕截图.我想推出自己的图像压缩算法(为了好玩,我不希望专业级别的结果),但我很难理解我从位图本身获得的像素数据.这是相关代码:

width = win32api.GetSystemMetrics(win32con.SM_CXVIRTUALSCREEN)
height = win32api.GetSystemMetrics(win32con.SM_CYVIRTUALSCREEN)
left = win32api.GetSystemMetrics(win32con.SM_XVIRTUALSCREEN)
top = win32api.GetSystemMetrics(win32con.SM_YVIRTUALSCREEN)

hwin = win32gui.GetDesktopWindow()
hwindc = win32gui.GetWindowDC(hwin)
srcdc = win32ui.CreateDCFromHandle(hwindc) 

memdc = srcdc.CreateCompatibleDC()                                             

bmp = win32ui.CreateBitmap()    
bmp.CreateCompatibleBitmap(srcdc, width, height)    
memdc.SelectObject(bmp)         


memdc.BitBlt((0, 0), (width, height), srcdc, (left, top), win32con.SRCCOPY) 
bmpinfo = bmp.GetInfo()
bmpInt = bmp.GetBitmapBits(False)
Run Code Online (Sandbox Code Playgroud)

GetBitmapBits(False)返回一个整数数组/元组.但我找不到有关bmpInt如何与像素数据相关的任何信息.输出如下所示:

123,1,-1,-13,-55,2,23,123 ...
Run Code Online (Sandbox Code Playgroud)

这些如何与每个像素的RGB值相对应?每3个像素一个像素?还是有alpha通道?另外,为什么有负数?供参考,这里是文档:http://docs.activestate.com/activepython/2.4/pywin32/PyCBitmap__GetBitmapBits_meth.html 那里没有解释......

Tre*_*vor 5

好的回答我自己的问题,以防万一其他人遇到同样的问题.GetBitmapBits(False)为每个像素的每个RG和B值返回一个整数.所以:

14,16,17,-1

代表R:14,G:16,B:17,以及α通道的-1.负数实际上是255的偏移,所以-112以上相当于255-112或143.

  • 只是为了澄清,你看到的数字是8位有符号整数,你所谈到的"偏移"是它们真的应该被视为无符号8位整数.例如-112是0x90(8位),144无符号.(不是143,如你所示) (3认同)