3

只是一个我无法找到任何详细信息的快速问题:我正在使用 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)

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

123,1,-1,-13,-55,2,23,123 ...

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

4

1 回答 1

6

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

14、16、17、-1

表示 Alpha 通道的 R:14、G:16、B:17 和 -1。负数实际上是 255 的偏移量,因此上面的 -112 将等效于 255 - 112 或 143。

于 2013-09-12T02:31:33.963 回答