只是一个简单的问题,我还没有找到任何细节:我正在使用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个整数是一个像素吗?还是有α通道?还有,为什么会有负数参考文件如下:http://docs.activestate.com/activepython/2.4/pywin32/PyCBitmap__GetBitmapBits_meth.html
没有任何解释。。。
最佳答案
好吧,回答我自己的问题,以防别人也有同样的问题。GetBitmapBits(False)为每个像素的每个R G和B值返回一个整数所以:
14,16,17,-1
表示α通道的R:14、G:16、B:17和-1负数实际上是255的偏移量,所以上面的-112等于255-112或143。